)]}'
{
  "log": [
    {
      "commit": "1f947b4dd13fe560a371fb5610ac619ef0546306",
      "tree": "8f65535f2e6a5bcd571c2974c9bccb9107b0eab4",
      "parents": [
        "17491ac89fffc79452c4a88b39a9b74f342508d3"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Dec 08 16:08:04 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 09 11:50:42 2020 +0000"
      },
      "message": "Exclude zygote methods from FreeAllMethodHeaders DCHECK\n\nZygote method set can change concurrently.\n\nBug: 175006160\nTest: run jit-zygote configuration with the check enabled.\nChange-Id: I973ab9303ade65ad7cad706b99e895b9c673ffb4\n"
    },
    {
      "commit": "095dc4611b8001861f8d0e621f9df704a933754a",
      "tree": "edbbd5b116d8caaceb4ce4605343f3e0d59c11c1",
      "parents": [
        "ed29dcee8b5d7e62bb119d2366f3b95dd5f96163"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 17 16:40:28 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 24 09:06:03 2020 +0000"
      },
      "message": "Move the profiling info out of ArtMethod.\n\nInstead, keep a map in JitCodeCache.\n\nBug: 112676029\nTest: test.py\nChange-Id: I5ab769a9b7b3214af7832478d1b06c9e9adbf8b8\n"
    },
    {
      "commit": "60ef3997cbcd866c505e51ecde7f06a0535110a0",
      "tree": "9c9054afcb9debf6edffc1f40987a4540c83561f",
      "parents": [
        "d9af38a3b76fc54909148456da2701666bade6e0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Aug 07 07:49:57 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 10 08:01:52 2020 +0000"
      },
      "message": "Reland \"Cleanups around the creation of ProfilingInfo.\"\n\nThis reverts commit a996425197a7946eae02d218f70610a853f2fe9a.\n\nBug: 112676029\n\nReason for revert: Fixed JitCodeCache::InvalidateAllCompiledCode and\n                   ForceJitCompiled.\n\nChange-Id: Ia87fda1bb40c504d9294e447f899ac1797ae98fc\n"
    },
    {
      "commit": "a996425197a7946eae02d218f70610a853f2fe9a",
      "tree": "402596c3af0e7928d7c19c3773ea02cb507998b1",
      "parents": [
        "193b696b1c35a49d4173c8b669a4ed79cb24748a"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Thu Aug 06 21:20:55 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 06 22:51:54 2020 +0000"
      },
      "message": "Revert \"Cleanups around the creation of ProfilingInfo.\"\n\nThis reverts commit 0fa304ee0fa63149222bfc6756f56cd285c56bd1.\n\nReason for revert: 685-deoptimizeable test is failing on\nhost debuggable (and cdex-redefine-stress-jit once) targets\n\nBug: 112676029\nTest: ./test.py --host --debuggable\nChange-Id: I88cf51ec48d704f966066ea9f2dbb17d32648f5a\n"
    },
    {
      "commit": "0fa304ee0fa63149222bfc6756f56cd285c56bd1",
      "tree": "c77efb7ddb945b38c5eb322b464b89545822af6e",
      "parents": [
        "84eb3c927c5a90aaa63b8e82420689b4ac978730"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 05 15:29:46 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Aug 06 15:25:24 2020 +0000"
      },
      "message": "Cleanups around the creation of ProfilingInfo.\n\nCreate a ProfilingInfo only when we are going to compile baseline.\n\nTest: test.py\nBug: 112676029\n\nChange-Id: I3fa0ef0f29fc955774d4960fef8274b99a9e3432\n"
    },
    {
      "commit": "9c7b4f1f50cfecc8ac8a8db27ab3434384ec5fab",
      "tree": "7b7091cc6705fec1cafeb93f551b2fb9d8936c14",
      "parents": [
        "55cc5868ec31b2b71f3d69ed6283e5f75c065d99"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 03 15:22:59 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 05 12:36:48 2020 +0000"
      },
      "message": "Remove obsolete saved_entry_point field in ProfilingInfo.\n\nIt was used for doing GC of jit code, but we are now relying on baseline\nfor giving that information.\n\nBug: 112676029\nTest: test.py\nChange-Id: Icb7c7b6adfe77a30500d53505b391b9d3aad19e6\n"
    },
    {
      "commit": "1a277a6e5d5152b4fe4dd5717432ecf8941ec820",
      "tree": "1b7846a0ef94062ce9883a36104f32f829f0a735",
      "parents": [
        "89992b8bbdf2d6d3c3da6a029e184c5d59eb505c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 31 16:07:17 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 03 09:58:44 2020 +0000"
      },
      "message": "Move mterp and switch interpreter to tiered JIT.\n\nThis is an intermediate step to move ProfilingInfo usage only within the\nbaseline compiler.\n\nIt also makes the system consistent with all intepreters now going to\nbaseline compilation before optimized.\n\nBug: 112676029\nTest: test.py\nChange-Id: I8505ca46ede9095683ac3f5f86f0c70335bed633\n"
    },
    {
      "commit": "853fc2ea8c4fb30d71adb1dbba6ebf0e8493ba51",
      "tree": "e8fc4a05fc29d19ca47547b8aeb7a4a26a3e0f6a",
      "parents": [
        "b8552725fda0bb65fc2100df12d10821f178dc4d"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Jul 27 17:01:44 2020 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Jul 27 19:05:42 2020 +0000"
      },
      "message": "runtime/jit: inclusive language fixes\n\nBased on:\n  https://source.android.com/setup/contribute/respectful-code\n\nBug: 161896447\nBug: 161850439\nBug: 161336379\nTest: m (comment updates only).\nChange-Id: Ibfb4b0c71ef2fae076a6b11dfabe07137f00a7a5\n"
    },
    {
      "commit": "c473dc7ae830ff6db4c9cead2be679af41da80e3",
      "tree": "b5b02261fdd2822f6478e0b83698bf35ee7c5e9a",
      "parents": [
        "01e5698d5440c2665b7ab6dd924985843be161a2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 03 15:04:21 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 03 19:31:43 2020 +0000"
      },
      "message": "Create individual counters and timers for compilation kinds.\n\nBug: 112676029\nTest: m\nChange-Id: I6f500d1253288e89ab83cd5d77f6ce0360bff340\n"
    },
    {
      "commit": "0d60a2b1eaa2cd2ec3481e49578b77405353efa1",
      "tree": "91f16b9321ef7631aff731b10da2024c6c9d2029",
      "parents": [
        "289bd1cccdb3aa37e2d129980f5c151f52f84897"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 17 14:31:56 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 18 08:37:10 2020 +0000"
      },
      "message": "Introduce an enum for the compilation kind.\n\nTest: test.py\nChange-Id: I5329e50a6b4521933b6b171c8c0fbc618c3f67cd\n"
    },
    {
      "commit": "f8cc26e53fecf48124789d23e233d5ab7025728e",
      "tree": "4ff361333e8d8916fd57d2e32b2a4d1b27df8518",
      "parents": [
        "ce0d0079e89e0238a334fdadba09c43940e3adcb"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 10 15:37:37 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 16 07:51:29 2020 +0000"
      },
      "message": "Fix a braino when marking a method as being compiled.\n\nWe now compile without having ProfilingInfos. Move the flag of being\ncompiled from the ProfilingInfo to sets in the JitCodeCache.\n\nTest: test.py jit-at-first-use\nBug: 147207937\nChange-Id: I1a372bb5534764278f5e9df674783cf918c690b3\n"
    },
    {
      "commit": "62dd4e83ba8cdf519168de32c5eff138efdda134",
      "tree": "8999875422725bcee5d6734dc702015d7aa4d90d",
      "parents": [
        "12b7ea1bdc97b35822aa939e19a6211d60eaaee7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun May 10 15:00:56 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 11 12:21:15 2020 +0000"
      },
      "message": "Continue try allocating until we\u0027ve reached max capacity.\n\n004-StackWalk currently fails because we start with a too low code cache\nto allocate code for a method the test expects to be JITted. To de-flake\nthe test, just keep on trying to allocate.\n\nTest: test.py\nChange-Id: Ie33e13bcc8825058259e12b0d4d552e89c9816e3\n"
    },
    {
      "commit": "41617b18f1c09e3031710d58fdb93c5aa43399ac",
      "tree": "36a0f3e3dc27e97980b96e1150ede718aee775fa",
      "parents": [
        "842555d72ee7511c193a65f34841cc92170a1850"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Mar 18 21:19:06 2020 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Mar 25 14:10:23 2020 +0000"
      },
      "message": "Add more logging and sanity checks for JIT mini-debug-info.\n\nUsed when diagnosing b/151137723. Keep it around.\n\nBug: 151137723\nTest: test.py -r --jit\nChange-Id: I10cc613c7396607e221fdc1f5972d26c1ac03fa8\n"
    },
    {
      "commit": "521644beb8f0a100b08a4cfb91c6aafb469925aa",
      "tree": "b316373d4708d8653e6749d5b3a70f4263cf6f94",
      "parents": [
        "7bbbe25f37ae70bebd121e0b4ea9bd53842281fe"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Mar 21 13:17:52 2020 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Mar 23 15:19:32 2020 +0000"
      },
      "message": "Call JitCodeCache::FreeAllMethodHeaders under JIT lock.\n\nThis ensures that both ArtMethods and the code are removed\nfrom the JIT atomically (otherwise other thread can interfere).\n\nI am not sure if this is partial issue, but keeping the\nallocated code and methods in sync makes sanity check happier.\n\nBug: 151137723\nTest: test.py -b -r --host --jit --64\nChange-Id: I8580a9112c86b277631c0b2f9dd245fd55a73559\n"
    },
    {
      "commit": "c76232ef401a036a9828fd27f22163619d9c1944",
      "tree": "2abf2af17f530d0328ac5326834647d29c8fe6f1",
      "parents": [
        "80495fdb62d96d68c8648db3236f614d94ac1e6e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 18 11:23:33 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 20 09:45:42 2020 +0000"
      },
      "message": "Fix relation between debuggable / JIT zygote.\n\n- Move the logic to clear precompiled in ClassLinker.\n- Add a null check on entries in ZygoteMap\n- Avoid doing JIT zygote actions (precompile, remapping boot images)\nwhen debuggable.\n\nTest: android.jdwptunnel.cts.JdwpTunnelTest#testAttachDebuggerToProfileableApp\nChange-Id: I9b5e391bb35aa04bbeba01b9b563b33f96395d2e\n"
    },
    {
      "commit": "30fd85157260c91327c6b5a0816d312dd505c0e0",
      "tree": "355823ab233177d529baa873911cf08bb5b5deec",
      "parents": [
        "80dc7dc20855bf680fa598127f26e6047821bdd0"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 20 20:27:58 2020 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Mar 12 12:10:49 2020 +0000"
      },
      "message": "Refactor RemoveNativeDebugInfoForJit.\n\nThis is partial revert of CL/1099280 (Remove global maps).\n\nIt somewhat resurrects the lazy method removal.\n\nThe original goal was to only remove methods from the GC,\nand do all of them in bulk for simplicity and efficiency.\n\nHowever, this is proving infeasible since we have several\ncorner cases which remove methods outside the GC code path.\n\nThe behaviour for the GC code path is preserved by this CL.\nInstead of passing method array, the methods are individually\nmarked for removal and then repacking is immediately forced.\nThe only difference is that coroner cases are done lazily.\n\nTest: ./art/test.py -b -r --host --jit --64\nChange-Id: I42729545d6b51df788d92f9cf149a6e065b90c68\n"
    },
    {
      "commit": "fc47d6bf37703ba58960a4b25723263a160c5555",
      "tree": "536a80d3d3c19ba1095d42395ba63ceb1dd03e18",
      "parents": [
        "e5c48f75476bc7bac843c862dfeeaeed2b95d94f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 11 15:05:43 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 11 17:00:06 2020 +0000"
      },
      "message": "Adjust JitCodeCache::TransitionToDebuggable.\n\nOnly clear the precompiled flag if the method has it. Also added some\ncomments.\n\nBug: 144947842\nTest: atest CtsJvmtiRunTest1982HostTestCases\nTest: 689-zygote-jit-deopt\nChange-Id: I8b2856823f359076c41240f463902eb57c1f7603\n"
    },
    {
      "commit": "280e6c323419ad08860514ff8c09eefb8fc8e969",
      "tree": "db1d3d73a8c00c5df9cb8809dc3ab53e5ed09af6",
      "parents": [
        "b28e3042b1dcab32c328b356a31f6ea8b50a9f9c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 03 13:52:07 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 10 18:46:53 2020 +0000"
      },
      "message": "Jit-zygote compiled code isn\u0027t debuggable\n\nWe check the debuggablity of compiled code by checking to see if it\nwas compiled by the JIT. This works since we throw all precompiled\ncode out when transitioning to debuggable. Unfortunately with\njit-zygote the non-debuggable zygote methods can be incorrectly seen\nas debuggable when encountered on the stack. This can lead to\nincorrect deoptimization and other issues. To fix this we explicitly\nexclude jit-zygote code from the check.\n\nBug: 144947842\nTest: ./test.py --host\nChange-Id: I4e953f64f8261b7a16d7c3199cec89998af0c1cf\n"
    },
    {
      "commit": "b28e3042b1dcab32c328b356a31f6ea8b50a9f9c",
      "tree": "4cfe4e2e6800db4ca843dd94a80e54fe97b8cfd7",
      "parents": [
        "b1fe5e18318c3af8d0cedc3f19cb6bc51817b859"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 06 13:02:46 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 10 18:46:53 2020 +0000"
      },
      "message": "Clear PreCompiled when we transition to debuggable after zygote fork\n\nWe were leaving the PreCompiled bits set on method objects. This meant\nthat in some circumstances non-debuggable compiled code could be\nreattached to methods after the switch to debuggable with the zygote\nfork.\n\nBug: 144947842\nTest: atest CtsJvmtiRunTest1982HostTestCases\nChange-Id: I1f642f6da441c4f023ec1cbd873c05914c73dd7e\n"
    },
    {
      "commit": "4cbb51a0c057249a500ca7fe3947401978f165d2",
      "tree": "af626569243ce560c45fe5c653ca61fae0cd6a0b",
      "parents": [
        "5d24c3d43152b36181fbf9819bfbe5589572f16b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 07 11:25:54 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 07 18:21:11 2020 +0000"
      },
      "message": "Fix ART code around JIT zygote.\n\n- The right image location for it now ends with a profile\n- Add profile locations to image spaces, so the JIT knows what to\n  compile\n- Remove now deprecated ApexImage related code.\n\nBug:119800099\nTest: boots, methods from framework gets compiled by zygote\nChange-Id: Ie31b62d0a25f1b50e266c1537c43307d7b29e138\n"
    },
    {
      "commit": "e91e795a77b96d58276f75b1b244a5509ef8c215",
      "tree": "d34f8164bb7adb8ed46e3c989877012555e194c3",
      "parents": [
        "aa6f6f1c86705fe3cedf929bd30d1e6f51524594"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 23 10:15:56 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 31 08:20:57 2020 +0000"
      },
      "message": "Replace instrumention id with stack pointers.\n\nReplace instrumentation ids for instrumentation frames, which are\ninherently broken (see b/72608560), and use stack addresses instead\nto properly identify which frames to pop / unwind.\n\nBug: 72608560\nBug: 148166031\n\nTest: ./art/test/testrunner/testrunner.py --trace --debuggable --ndebuggable --optimizing --interpreter --jit --debug --ndebug -j32\nTest: run-libjdwp-tests.sh\nTest: 2011-stack-walk-concurrent-instrument\nTest: ./art/test/run-test --host --dev --runtime-option -verbose:deopt,plugin --prebuild --compact-dex-level fast --jit --no-relocate --create-runner --runtime-option -Xcheck:jni 1965-get-set-local-primitive-no-tables\n      art/tools/parallel_run.py -j80 /tmp/path/to/runit.sh --out failure.txt\n\nChange-Id: I71f6e55b9da608796cd3142b147f7b50bbd292ec\n"
    },
    {
      "commit": "085f7408de57fedac4ec95d5b5e8b4fe809dbeba",
      "tree": "108393c6fc6d2fa0ed27f6b299b993889a43fe40",
      "parents": [
        "0d38e8587c014e600bc6ee916aa15912c0ef190d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 16 16:30:48 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 16 17:53:01 2019 +0000"
      },
      "message": "Re-arrange code to avoid recursive locking of the JIT lock.\n\nCreating a profiling info requires the lock, so don\u0027t hold it before\ncalling ProfilingInfo::Create.\n\nTest: test.py\nChange-Id: Ib217052c09274665cbfa7572540ee391858dd342\n"
    },
    {
      "commit": "b0a9747b363d1a368ed390fde07c6bfd6fbc78bf",
      "tree": "490bc94c52b5349f6c689d73db37c6ffca264869",
      "parents": [
        "64a5d1ae323efa384e317e3b8f2cc413a1ac2680"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 05 15:17:46 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 06 13:48:12 2019 +0000"
      },
      "message": "Fix go/lem breakages on baseline configs\n\n- Don\u0027t collect profiling info for now, as compiled code reference\n  them directly.\n- Only compile optimized after reaching baseline hotness threshold if\n  tiered JIT is enabled.\n\nTest: test.py, go/lem benchmarks.\nChange-Id: I0d21d5f77825a710588ef5a7c11288a5b9757907\n"
    },
    {
      "commit": "e3f775bace85f4fe02dfd4042091d2f7d6fcbc25",
      "tree": "41446ada658dc05abb073edc5c2c134e83802619",
      "parents": [
        "621738039bbca55a2513bddb6ea66d4934fa7089"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 04 14:41:52 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 05 13:34:57 2019 +0000"
      },
      "message": "Address comments from aog/1180224.\n\nMove handling of objects in interpreter cache to weak objects.\n\nBug: 119800099\nTest: test.py\nChange-Id: Ie7b2b2e285607a7c1460fd4f0b4ea690f9a16594\n"
    },
    {
      "commit": "a59af8aeaad8fe7d68d8f8de63eab9cf85b6ab31",
      "tree": "83195c74b135731cc4555254763a8f449691c1b0",
      "parents": [
        "5c8cc64b5f1580faf510f27527e7e22987174963"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 27 17:42:32 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 14:32:09 2019 +0000"
      },
      "message": "JIT baseline: trigger optimized compilation on hotness threshold.\n\n- Add a new hotness count in the ProfilingInfo to not conflict with\ninterpreter hotness which may use it for OSR.\n- Add a baseline flag in the OatQuickMethodHeader to identify baseline\ncompiled methods.\n- Add a -Xusetieredjit flag to experiment and test.\n\nBug: 119800099\nTest: test.py with Xusetieredjit to true\n\nChange-Id: I8512853f869f1312e3edc60bf64413dee9143c52\n"
    },
    {
      "commit": "de3e51d655ac46b4e570ad66c664308745c3e8f8",
      "tree": "389ce5668a712e78a273dd686a5bd7edd0c24e34",
      "parents": [
        "20036d80f246b564331e0943aa07ec3b50fc15d9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 28 16:29:55 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 29 08:39:19 2019 +0000"
      },
      "message": "If a collection is in progress, we need to mark new code.\n\nOtherwise, the GC will collect it.\n\nThis got accidentally removed here:\nhttps://android-review.googlesource.com/c/platform/art/+/719573\n\nBug: 136108889\nTest: test.py\nChange-Id: I00a803b7fe8220bd84f55c039d6d0e52b1469459\n"
    },
    {
      "commit": "e3884e357566d739a33f22a0bdc4b76173cd6093",
      "tree": "d6169d034cb5a5d1c7e7a3cd0e9e6c18dd161f0b",
      "parents": [
        "45217376b527cd17d758152c54960e6786288e31"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 28 17:04:49 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 29 15:45:01 2019 +0000"
      },
      "message": "[jitzygote] Map the boot image fd after the contents have been written.\n\nIn order to not rely on undefined behavior from the kernel, map\nthe boot image methods fd after the shared mapping got updated with\nthe contents.\n\nBug: 119800099\nTest: BusinessCard\nChange-Id: I501b8994f2b0f2b27c4693443827ae1583f9fae4\n"
    },
    {
      "commit": "5115a4dffb95637efe1df92d6f6eb70a8724c9ae",
      "tree": "605f5ca51dde13b1ec93fb0348d52969367b126e",
      "parents": [
        "15ffafd026962a16ee1abdea630542dc46f67482"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 17 14:56:47 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 18 12:49:45 2019 +0000"
      },
      "message": "Clean up initialization checks for entrypoints.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing --jit\nBug: 18161648\nChange-Id: Ia3c2fdb616a5bb289e5afeccd4e6fe3eaf7ed697\n"
    },
    {
      "commit": "cce414f8b46de709250af49398083e99f96b6161",
      "tree": "b212a1a4aa7fbd47728785bf9e979b6ffb60fde4",
      "parents": [
        "0866ea41c21df6672b302eabe5b98ebb40c92613"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 07 08:51:33 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 16 15:29:16 2019 +0000"
      },
      "message": "Delay entrypoint update until visibly initialized.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing --jit\nBug: 18161648\nChange-Id: Idde0cbc848f19236319426bc82ac10b8b8bb9ee9\n"
    },
    {
      "commit": "adb66f967432ff1f0d51726923a64943c9f1d35b",
      "tree": "1444900ef83edb837c446361ef38bbf17c17f50c",
      "parents": [
        "ff258063f2748aadf0ea83d0d284b1bedaf792d9"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Oct 10 12:59:43 2019 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Oct 10 17:34:37 2019 +0000"
      },
      "message": "Revert^2 \"JIT: Separate code allocation and initialization.\"\n\nThis reverts commit 63b0c26aae3e7237166dd781eb7a15fbc7c091c2.\n\nTest: ./art/test.py -b -r --host --all-gc -t 708\nReason for revert: Reland after bug fix.\nChange-Id: Ic13e2799bf4bdd8ca468f72cc0f3b72f224f2b08\n"
    },
    {
      "commit": "63b0c26aae3e7237166dd781eb7a15fbc7c091c2",
      "tree": "5713f52331c0cd3b881df80f4314f9ea2a0f09db",
      "parents": [
        "e1b36f09cb478a39ba443f6acb11cd1901c01c1d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 09 20:12:15 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 09 20:12:15 2019 +0000"
      },
      "message": "Revert \"JIT: Separate code allocation and initialization.\"\n\nThis reverts commit e1b36f09cb478a39ba443f6acb11cd1901c01c1d.\n\nReason for revert: Crashes in art::jit::JitMemoryRegion::FreeCode\nhttps://logs.chromium.org/logs/art/buildbucket/cr-buildbucket.appspot.com/8900060997388741808/+/steps/test_libcore/0/stdout\n\nChange-Id: I40259baec9acbb7889732548f8b31e0a48651cd9\n"
    },
    {
      "commit": "e1b36f09cb478a39ba443f6acb11cd1901c01c1d",
      "tree": "75642c703fee9fce7cd09af344dd26d485379b13",
      "parents": [
        "449011217844401ed491ad0f89dcba21cc26bfc4"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Oct 04 17:44:33 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 09 15:51:56 2019 +0000"
      },
      "message": "JIT: Separate code allocation and initialization.\n\nAllocate(reserve) both code and data first,\nand then initialise(commit) both of them.\n\nThis is useful since we know the address sooner\nfor the purpose of debug info generation.\n\nTest: ./art/test.py -b -r --jit --host --64\nChange-Id: I4971a8801004efbc6c2b27884834dda775b72664\n"
    },
    {
      "commit": "444e998f5987007bd2783b4d88a9970d1a17736f",
      "tree": "ef8a93058e973c2c0cf022ea2265679cbb783580",
      "parents": [
        "44ab2cd97c7f4086013a766f442d2f9f619efcc8"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 02 17:59:23 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Oct 08 13:43:16 2019 +0000"
      },
      "message": "JIT mini-debug-info: Generate the debug info sooner.\n\nWe need to add the debug info before the entry-point is set,\notherwise there is window of time when we are missing it.\n\nTest: test.py -b -r --optimizing --jit --host --64\nChange-Id: I3bbad0c96d68e9603bac131faee498b8b9f62699\n"
    },
    {
      "commit": "1cef6b2a2542448a5f3ab954008c24bdb5fbbd8a",
      "tree": "ecec24cf32ea236245e9bf5f6f1b62b245588505",
      "parents": [
        "c34eab45161c51bf63e548e44645cbcc59d01268"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 03 15:26:15 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 07 08:45:09 2019 +0000"
      },
      "message": "Add and use a read-barrier free NeedInitializationCheck method.\n\nThe JIT may be working with ArtMethod that are in the process of\nbeing deleted.\n\nBug: 142001849\nTest: 674-hiddenapi\nChange-Id: I3632ba6f49bcf54a29bd92882eb343b92945ef28\n"
    },
    {
      "commit": "623d4f1ba4f4218c5472e3d9e1e9bf707795878d",
      "tree": "44a01387b2fcdda602019cefa3bf78b6535b2caa",
      "parents": [
        "94af5824acb28f9756fb8246f95f78c4026228e2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 30 13:45:51 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Oct 06 13:09:09 2019 +0000"
      },
      "message": "Share boot image methods memory in JIT zygote.\n\nOnce the zygote is done compiling, copy the ArtMethods to\nshared memory that will be in-place remapped. This is\na memory optimization that enables memory sharing between\nzygote and early forked processes.\n\nCurrently relies on undefined behavior of the kernel, but will\nfollow-up with a CL that uses file sealing that will address this.\n\nSaves around 2MB of memory for processes forked before zygote is\ndone compiling - there are around a dozen of processes.\n\nBug: 119800099\nTest: boots, PostLaunchMemoryUsage\nChange-Id: Ia1bdbd1abd27f28b087d9f33aca4cd901d55082f\n"
    },
    {
      "commit": "5a0b6726562948421fbbeb38d20ffd66ef688ff8",
      "tree": "9507db95b78ba55228fc24dc43f485a9755b9773",
      "parents": [
        "a6c9b78a3f2c7a7f39761427dcd32e0bf6c546f3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 24 15:09:40 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 25 16:02:56 2019 +0000"
      },
      "message": "Boot image: only use the resolution stub when there is AOT code.\n\nThis avoids dirtying the page when the class becomes initialized.\n\nTest: test.py\nBug: 119800099\nChange-Id: I5cd7ae56b6637583179dbb766da251977b7ac961\n"
    },
    {
      "commit": "4ac0e1571e015a01d75091c3daef065f9624ad77",
      "tree": "4d13edeab88bd6fd724388c48385b0c3cca4f3a8",
      "parents": [
        "5a2301d897294ff4ee6de71f459dc2566dc3fa1a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:14:50 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:14:50 2019 +0000"
      },
      "message": "Revert \"Revert \"Basic structural redefinition support\"\"\n\nThis reverts commit 5a2301d897294ff4ee6de71f459dc2566dc3fa1a.\n\nBug: 134162467\n\nReason for revert: Relanding as unclear if issue is due to topic.\n\nChange-Id: Ib1d1cf2e9132e30c9649b760ae9ae2d8ceacf843\n"
    },
    {
      "commit": "5a2301d897294ff4ee6de71f459dc2566dc3fa1a",
      "tree": "2bd06ab3f463734994b3d251f6115514520dbb3f",
      "parents": [
        "4eb6eb40e88214fcc874d93e75660cb580cb4d58"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:11:22 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:12:13 2019 +0000"
      },
      "message": "Revert \"Basic structural redefinition support\"\n\nThis reverts commit c971eafeff43e4e26959a6e86b62ab0a8f1a6e1c.\n\nBug: 134162467\n\nReason for revert: Breaks on redefine-stress\n\nChange-Id: I4e38da23d65b5b34b26b5ab537a3583328e078a4\n"
    },
    {
      "commit": "c971eafeff43e4e26959a6e86b62ab0a8f1a6e1c",
      "tree": "f8647487e7465712fd73118ceb89e13167a12648",
      "parents": [
        "1ba7e8c10af4e270864a417044244d63db53ccf5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 13 10:50:38 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 17 23:52:12 2019 +0000"
      },
      "message": "Basic structural redefinition support\n\nThis adds basic support for adding methods and fields to already\nloaded classes using redefinition. This \u0027structural class\nredefinition\u0027 is currently limited to classes without any virtual\nmethods or instance fields. One cannot currently structurally redefine\nmultiple classes at once nor will structural redefinition trigger the\nstandard redefinition events.\n\nAfter structural redefinition all references to the old class, and its\nfields and methods are atomically updated. Any memory associated with\nthe static fields of the old class is zeroed. Offsets for field access\nmight change.  If there are any active stack frames for methods from\nthe redefined class the original (obsolete method) code will continue\nto execute. The identity hash code of the redefined class will not\nchange. Any locks being held, waited or blocked on by the old class\nwill be transferred to the new class.\n\nTo use this feature the process must be debuggable and running with\n-Xopaque-jni-ids:true.\n\nFor device testing use a wrap.sh that adds the following flags:\n\n    \u0027-Xopaque-jni-ids:true -Xcompiler-option --debuggable -XjdwpProvider:adbconnection\u0027\n\nStructural redefinition only available using the\n\"com.android.art.UNSAFE.class.structurally_redefine_class_direct\"\nextension. This will not trigger the normal class-redefinition events.\nOnly one class may be redefined at a time.\n\nNB There are still some holes in this potentially allowing obsolete\nmethods/fields to be visible. Most notably during jni-id, MethodHandle\nand VarHandle creation as well as potentially other places in the\nruntime. These holes will be closed by later CLs. Until then the\nextension to access structural class redefinition will remain tagged\nas UNSAFE.\n\nTest: ./test.py --host --all-compiler\nBug: 134162467\n\nChange-Id: I825d3a4bdb9594c0147223ae69f433ce9bbfc307\n"
    },
    {
      "commit": "87fb032ee1e7ae98df26c646c450ef44e23fc805",
      "tree": "6754b2d2a0e38277885a691d1be6f0d796478cc7",
      "parents": [
        "a86a5d162e6b59a32e8ea7991e6c8a157aca5a0a"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Aug 20 10:34:02 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun Sep 01 21:08:43 2019 +0000"
      },
      "message": "Fix JIT data dual mapping for apps.\n\nWe don\u0027t use it now, but it would be nice to make it functional.\n\nMark the read-only memory as const, and fix the compile errors.\n\nTest: test.py -b --host --jit\nBug: 119800099\nChange-Id: Ic1c45072f3c97f560e843f95fb87b95f754c6e03\n"
    },
    {
      "commit": "8fc2f95291206806599d4f2a50da529da85155b6",
      "tree": "c3c9de9a9a925d6ab790f6db466d1f9c17ed1010",
      "parents": [
        "9ce340f829f836560278ecd078fbefcf19c9d629"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jul 31 18:40:09 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Aug 16 09:10:55 2019 +0000"
      },
      "message": "JIT mini-debug-info: Remove global maps.\n\nKeep the extra bookkeeping information in JITCodeEntry.\n\nAlso do the compression eagerly during GC rather then lazily.\n\nTest: test.py -b --host --jit\nBug: 119800099\nChange-Id: Ie6cc682033a32c01d4c2cac242d8a4201116f940\n"
    },
    {
      "commit": "ac8f9369967cff7f31aca5e46db3041a3eda3dce",
      "tree": "e4d6c296c424c68f64fb085c1290779acb7ab455",
      "parents": [
        "ea5b4297d7748bb87a6f1133103df834ea16f227"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Aug 13 16:59:25 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Aug 15 07:10:32 2019 +0000"
      },
      "message": "JIT code cache: Don\u0027t set footprint limit for data portion.\n\nWe use code footprint limit to trigger GCs,\nbut we don\u0027t need it for data.\n\nThe mspace algorithm still only uses as few pages as possible.\n(otherwise we would have been wasting memory as it is now)\n\nThis stops the AllocateData() from unexpectedly failing.\n\nTest: test.py -b --host --jit\nBug: 119800099\nChange-Id: I5e59c9acf335d39d733592d0666f5e987136d883\n"
    },
    {
      "commit": "44b977d9e2974cdbd8ef11f35919166dada92bda",
      "tree": "f9a883ca345ec204fb061364fef8c849d5d0d871",
      "parents": [
        "759845ff57929e26bfe922b30c814cb58e886bc1"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Aug 09 12:15:32 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Aug 12 17:54:47 2019 +0000"
      },
      "message": "Print more JIT memory use stats.\n\nAlso print the amount of resident(RSS) memory per category.\n\nTest: observe ANR log on device\nBug: 119800099\nChange-Id: Ic8a71de5c280fe42b656ed0e6383a45b0c185109\n"
    },
    {
      "commit": "f2dcba05ca76e0609687cf1e8013bbe983c73b2e",
      "tree": "b72fc3424d5c4a57b4157fbaeb087a43d2776aa7",
      "parents": [
        "27351be1c1b7cabf714872b9fa40c7ccbefe9b76"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 22 13:59:24 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 22 16:51:28 2019 +0000"
      },
      "message": "Fix statistics reporting in JIT.\n\nWe now need to take into account shared / private regions.\n\nTest: boot, take a bugreport\nBug: 119800099\nChange-Id: I131a73a0fd96a60b13c464c17445b0ba3973bef4\n"
    },
    {
      "commit": "de0ccffc5e8b22f86730b125cd3cfd825a576ba7",
      "tree": "6c723636f30f5f9bc9170421f2649505c49fa191",
      "parents": [
        "4345aacf582a5206976d5bed98ab4abd7b9a8c40"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 19 10:54:05 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 19 17:33:09 2019 +0000"
      },
      "message": "Fix a braino in GetSavedEntryPointOfPreCompiledCode.\n\nWe should return the entrypoint, and not the code_ptr. On thumb,\nthe entrypoint is code_ptr + 1.\n\nTest:  jitzygote boots, zygote32 doesn\u0027t crash.\nBug: 119800099\nChange-Id: I41c97291c54efb4d6e342d260d693ab1abf8dffe\n"
    },
    {
      "commit": "323844002e54243e295497e7f829e46a533da621",
      "tree": "e6219f651332ee140042e4e0d4c975919f4fe9bf",
      "parents": [
        "297a0533d2e3f1d49f0b73c5d1e3b09ce0418de2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 17 20:06:44 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 18 13:12:57 2019 +0000"
      },
      "message": "jitzygote: Handle case of methods having the resolution stub.\n\nWe need to cache the compiled code until the class is initialized.\n\nTest: test.py\nTest: jitzygote config boots\nBug: 119800099\nChange-Id: Ib7a1efc3e101d9dabfad963621a1fe4a142e9b29\n"
    },
    {
      "commit": "b08d5db0bebd9a17b6e66cb98aeedcc744f6d1eb",
      "tree": "cafcd45b3c923a50be482c8dba45426d4b9ed319",
      "parents": [
        "2a290e14fd10a5e494ee0a48e07bc238a7a271d6"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 17 10:45:36 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 17 18:54:04 2019 +0000"
      },
      "message": "Move location of where we clear thread pool tasks post fork.\n\nBug: 119800099\nTest: boot jitzygote, system server methods get JIT compiled.\n\nChange-Id: Ieb66b36aefad7a570ebfdfa296a2713c20d36f22\n"
    },
    {
      "commit": "e32d24c75bf62e3cb9bff266ad4be859634320a9",
      "tree": "73a9c51958a77b3040b0ce04041424930b709873",
      "parents": [
        "d17eac6b037f67494e31671d1a1d9d233ba3f237"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 05 10:28:59 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 05 15:36:58 2019 +0000"
      },
      "message": "Store zygote compiled code in a shared map.\n\n- Store flags in the ArtMethod to know that it is compiled by the zygote\n- Query the map when entering a zygote compiled method from the\ninterpreter.\n\nBug: 119800099\nTest: boots\nChange-Id: Ib1a38266573e28d371034d02d6bb83f9b8b2e317\n"
    },
    {
      "commit": "af213ccb19231a4f46340bf8a791b4f498b8bda4",
      "tree": "f668938f3f225e27ffd6b75993e2d8ddf65ae148",
      "parents": [
        "0cc6a825b14893d0d23311d7d708087794675e77"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 01 10:50:55 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 02 12:50:41 2019 +0000"
      },
      "message": "Fix ClearEntryPointsInZygoteExecSpace.\n\nMethods allocated in the shared region now don\u0027t have a profiling\ninfo.\n\nAlso move test 689-zygote-jit-deopt to now use proper ZygoteHooks APIs\nto fork from zygote, and have non-bionic build create a shared region.\n\nTest: 689-zygote-jit-deopt\nBug: 119800099\nChange-Id: I400618673a0b5b2ba7389e46d692ea6a58dbeea8\n"
    },
    {
      "commit": "88f3fd910cb0fbc1c2233fc65d2a30542cc62921",
      "tree": "6fcdd7d4e5bd60281d55e4be1bb155a219edc999",
      "parents": [
        "64f1f1f2d6cd13249601f7de2b9d1dab26480f78"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 16:32:13 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 28 14:19:08 2019 +0000"
      },
      "message": "jitzygote: madvise DONTFORK on writable shared region.\n\nSo only the zygote can write to the shared mapping.\n\nTest: boots\nBug: 119800099\nChange-Id: I9efde2c9c89dbc7445da890ee975effe13ba3790\n"
    },
    {
      "commit": "a48c3dfcebece7ee4b893757b715319f0b5b1fa7",
      "tree": "eb846bcf242f7e9f4243196b5f4546b0a222cfa0",
      "parents": [
        "1459929a7e9ea96932b6c24597e1692b9b05606c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 13:11:12 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 28 06:37:34 2019 +0000"
      },
      "message": "Revert \"Revert \"Make the JIT zygote memory shared.\"\"\n\nThis reverts commit 2fef66b294417d447630f9d98de68227eef476d3.\n\nBug: 119800099\nBug: 136110523\n\nReason for revert: Fixed webview_zygote case.\n\nChange-Id: Iaae8c999463d77b7b1e62b55458493bdbc97a104\n"
    },
    {
      "commit": "e764f38a4b04e0a068631bc53d8737ba07639557",
      "tree": "5980097784fe6326647bd1615a5ee1c9739d8d16",
      "parents": [
        "f90c406cfb7c495378743837b01446120742e74f"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jun 27 12:56:48 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jun 27 15:40:27 2019 +0000"
      },
      "message": "Remove unnecessary cache alignment fixes\n\nThis change reverts two alignment changes relating to 32-bit ARM\nruntimes on 32-bit ARMv7 kernels. These were speculative fixes before\nthe problem was properly understood.\n\nThis means code alignment in the JIT code cache is determined by\nGetInstructionSetAlignment() for all architectures.\n\nThe first commit removed is 521ff988097af7c79a0b94368d33d21f7c7dfb7d.\n\nThe second is df1ab205c78fbfae152947e9618d8871a42a744b.\n\nTest: manual (see b/132205399)\nBug: 136150630\nBug: 132205399\nChange-Id: I9e5ed4b2271df80b7c7ea81cdb088b45c456b86a\n"
    },
    {
      "commit": "2fef66b294417d447630f9d98de68227eef476d3",
      "tree": "59fc4ea6cf13217eb92fbdd4e39561b5ad518cf0",
      "parents": [
        "21d5994583c679cd5d8573b5d35dbd659bdca2c7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 26 22:00:02 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 26 22:00:38 2019 +0000"
      },
      "message": "Revert \"Make the JIT zygote memory shared.\"\n\nThis reverts commit 05f87217ddc9b4b9186710c0135b918f456c5aef.\n\nBug: 119800099\nBug: 136110523\n\nReason for revert: testWebview flaking\n\nChange-Id: I96afa6bc9c56c4aaf5ed72ae370f6f69c096c559\n"
    },
    {
      "commit": "aeb0223f14a9dbd9e7caaa177d055684b4819799",
      "tree": "d396dcddb3afa328d192776bc1856a48f5f52583",
      "parents": [
        "05f87217ddc9b4b9186710c0135b918f456c5aef"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jun 25 14:18:18 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 26 14:59:58 2019 +0000"
      },
      "message": "Retry cache flushes on ARMv7 devices\n\nOn ARMv7, CPU cache flushing requires a system call. This system call\ncan fail and return an error. This change moves to using the system\ncall directly (cacheflush) so flush failures can be detected and\nflushing can be re-attempted. For other platforms we continue using\n__builtin___clear_cache which is an intrinsic with a void return\ntype.\n\nThe strategy for ARMv7 is to attempt to flush the entire range\nrequired. If this fails (a rare occurance), we visit the pages in the\nflush range sequentially, first reading a byte from the page to\nmaximize it\u0027s chance of being resident and then flushing the cache\nlines. We repeat this up to 4 times per page if there are failures.\n\nAs a final fallback, when neither approach to flushing the JIT code\ncache pages succeeds, the code is not committed to the JIT code cache\nas the cache lines for the new code are in an unknown state.\n\nThis complexity is necessary for the dual view JIT because the\nexecutable range is not writable so the kernel logic does not\n(appear to) anticipate the need to flush (or invalidate) cache lines\nthere. Previously the failing cache flush operations went undetected\nand result in bad i-cache state and cause crashes. These issues have\nonly been reported on devices with 32-bit kernels.\n\nBug: 132205399\nTest: art/test.py --host --jit -j32\nTest: Manual (described in bug)\nChange-Id: I63b56beaac610ea973def0a57118be9a2647da23\n"
    },
    {
      "commit": "05f87217ddc9b4b9186710c0135b918f456c5aef",
      "tree": "6e7bc0d2a3d8faa94c303d7d753319f3850fadcd",
      "parents": [
        "8d335b61d637fa9b040eb9d559dbac98067467f1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 19 10:00:00 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 26 12:24:15 2019 +0000"
      },
      "message": "Make the JIT zygote memory shared.\n\nTest: boots\nBug: 119800099\nChange-Id: I75ff8a58eea4de5cb833139641b4e15b8394d9b1\n"
    },
    {
      "commit": "00a37fff76278cd19cf59568df87495f6663c4b6",
      "tree": "8dc0f95daf800d36ac5da12faa658416b0dcc6a0",
      "parents": [
        "6c0c7c8226a80d0e56f071118f46e4491cfa7754"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 20 14:27:22 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 24 15:40:45 2019 +0000"
      },
      "message": "Move code writing to data portion of the JIT cache in JitMemoryRegion.\n\nSo there is only one method that needs to write to the data portion\nof the region.\n\nTest: test.py --jit\nChange-Id: I5b7dc442526da54f83a208cb70c8cf86fad6ebcd\n"
    },
    {
      "commit": "a61dbc078a17ffc470d6714270dd303370aaebd6",
      "tree": "087679e8052dab86c5caf3548cb379da47b3ceb7",
      "parents": [
        "9d3b5ec3bf76855ccb3e01abad41f1fa9e305ade"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 20 14:49:25 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 21 08:10:13 2019 +0000"
      },
      "message": "Remove useless ScopedCodeCacheWrite calls.\n\nTest: test.py --jit\nChange-Id: Ia84535dd024ca2b999cf0e1394a9deb61a4ceda1\n"
    },
    {
      "commit": "349845ae9c820484973959e1f3d366099d2fa0c2",
      "tree": "208431b346ab23f9aca9870ae06a993c640b3a8e",
      "parents": [
        "1b2a49b7aba39ed6663a69dfdf63d0df069f0d42"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 19 13:13:10 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 20 07:08:52 2019 +0000"
      },
      "message": "Move JIT code allocation to JitMemoryRegion.\n\nSo that JitCodeCache does not need to know about dual view.\n\nTest: m\nChange-Id: I19d2e8e69eef07648803937fff928aa9b45ac5a2\n"
    },
    {
      "commit": "521ff988097af7c79a0b94368d33d21f7c7dfb7d",
      "tree": "61e7b0377f02596acdb0520ad5faf1cc6505cb8a",
      "parents": [
        "3149252c4b2a27b137b40a0d379e09ada9bb2d05"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jun 18 13:56:28 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 18 17:36:44 2019 +0000"
      },
      "message": "For 32-bit ARM devices align method headers and code to 64-byte\nboundaries.\n\nFor other architectures, move back to instruction set alignment.\n\nRename kJitCodeCacheAlignment to kJitCodeAccountingBytes since it\u0027s\nnow only used for accounting rather than alignment.\n\nBug: 132205399\nTest: art/test.py --host --jit\nTest: manual (described in bug)\nChange-Id: I88f5f39381bf0331ce8540a929c6a68b3b5e0c75\n"
    },
    {
      "commit": "3149252c4b2a27b137b40a0d379e09ada9bb2d05",
      "tree": "dacf56c50d32ed913b0c2014a84dacfccff3bbcd",
      "parents": [
        "9c54e1802855e70b109adff47d5b0dd616806525"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jun 18 12:13:49 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 18 14:46:29 2019 +0000"
      },
      "message": "Fix memory leak in JIT cache\n\nWhen adding code to the JIT cache it is possible for CHA assumptions\nto be invalidated and for the generated code to be invalid. The path\nfor handling this should release the JIT cache memory holding the\ncode.\n\nTest: for i in {1..100} ; do art/test.py --host --jit -r -t 044 ; done\nChange-Id: Ia6213647064a3db0c4d11bf1181c325375282528\n"
    },
    {
      "commit": "9c54e1802855e70b109adff47d5b0dd616806525",
      "tree": "9f63ede3e819b9ac22a645d9b025d6f3e6a418fa",
      "parents": [
        "697c47a7ffd4489c4bc4edc229c8123309526286"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 18 10:42:52 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 18 14:27:45 2019 +0000"
      },
      "message": "Simplify JIT memory region creation.\n\nHave JitCodeCache only call JitMemoryRegion::Initialize.\n\nTest: m\nChange-Id: Idc6f75bf7ebb94fb2dfd0a73b02d8e0befefa85e\n"
    },
    {
      "commit": "741a0707d45a779ed2a538954027ef101708aead",
      "tree": "02fbc1df3fd41b01269888eac8f5d951cd04680a",
      "parents": [
        "f1bd5f3dc7a99a62818b03dd78510a416b3c10bd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 10 11:18:11 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 10 13:22:46 2019 +0000"
      },
      "message": "Fix two bugs in jitzygote configuration.\n\n- Fix a stalled ObjPtr reference.\n- Fix DCHECKs now invalid with system server also using \u0027prejit\u0027.\n\nBug: 119800099\nTest: boots\nChange-Id: If64e09115192f06763335237a7518df619965a3c\n"
    },
    {
      "commit": "7f7539b8ed0a31de1d1b6e1f0b730d55e37666a6",
      "tree": "d1611f06e3e468ff61c4d4bc349777b85b3a2e16",
      "parents": [
        "93adcb53c77f4f04dfebd30b94e8ea9936aa8abb"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 06 16:20:54 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 10 07:32:49 2019 +0000"
      },
      "message": "Pass the memory region to allocate into to the compiler / allocation.\n\nTest: test.py\nBug: 119800099\nChange-Id: Ie3cba5abe3dd4f8756af5ecfd6c26320de314fe8\n"
    },
    {
      "commit": "2a905b2b50fb77723f6627e2d6a5df218d21081f",
      "tree": "4fa5d59381ed16073bc5f57cf9c9522e6f81acdd",
      "parents": [
        "29bb803f2d41ea48e9f255dadd22b4c291e0a036"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 06 09:04:07 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 06 12:53:49 2019 +0000"
      },
      "message": "Move memory related regions of the JIT cache in its own class.\n\n- Moves the JIT lock into the global locks list\n- Jit cache has two regions: one inherited from zygote, and its own.\n\nBug: 119800099\nTest: boot, test.py\nChange-Id: I833ba2b5a3d3c10fa01286cdf52603fa174a2cc7\n"
    },
    {
      "commit": "d2f13ba7153aa7b77e4662844233c848535f8aac",
      "tree": "9a0f9bda0e886b1652cc306dba4a05648385beb0",
      "parents": [
        "e7d7e9dd01b6ce5a079ebc7e369f4a8d4e42f7d8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 04 16:48:58 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 06 08:02:04 2019 +0000"
      },
      "message": "Remove requirement of a ProfilingInfo for jitted code.\n\nWhen pre-jitting (zygote or system server in jit zygote mode),\nthe profiling info is just memory overhead. Remove the need to have\none.\n\nBug: 119800099\nTest: boot, testrunner.py --jit\nChange-Id: Ie74d870eebef72c903225542e9b41dfe98132419\n"
    },
    {
      "commit": "df1ab205c78fbfae152947e9618d8871a42a744b",
      "tree": "d7c461bba27009dd8304a2da1b0cea5b031a1a7b",
      "parents": [
        "743600d5ae654817a5d81179fb480816e0cd139d"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Sun Jun 02 16:45:03 2019 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jun 04 15:34:07 2019 +0000"
      },
      "message": "ART: Avoid shared cache lines for JIT code allocations\n\nDual view JIT exhibits some hygiene issues that causes crashes on\ndevices with 32-bit kernels.\n\nThis change makes JIT code allocations cache aligned. This is based on\nguidance in the v7_coherent_user_range() that says \"it is assumed that\nthe Icache does not read data from the write buffer\".\n\nBug: 132205399\n\nTest: \u003e2000 boot tests on affected device with no zygote crashes.\nTest: No crashes running ART JIT benchmarks on go/lem\nTest: No failures with Treehugger\n\nChange-Id: I901e2e5c07b9502876b33f572be63ec1dca19cbe\n"
    },
    {
      "commit": "eab0248f8785f25241011a953940ea5a4c5e7467",
      "tree": "15de339b7f70b2a5a4f866bd090afca2922fbf02",
      "parents": [
        "5515310c7e83f8bd11f575fba7439edbd3bea4d9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 09 10:28:17 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 10 05:05:45 2019 +0000"
      },
      "message": "Clean up after obsolete methods update fix.\n\nThis is a follow-up after\n    https://android-review.googlesource.com/942485 ,\naddressing most of the late comments.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nBug: 73333076\nChange-Id: I52c0a3cbf81e97474dc46846486263946379416a\n"
    },
    {
      "commit": "c45b5897e65d8713f008732277db2544b9af1e67",
      "tree": "1d193616a402f6d21f730bff8ac9377b4ae1896e",
      "parents": [
        "2cd21b20345c2733bda1366830ffd767f0682b9f"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 24 10:32:04 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Apr 26 15:01:21 2019 +0000"
      },
      "message": "jitzygote: JIT native methods on first use.\n\nCompile JNI stub on first use to avoid the expensive generic stub.\n\nTest: profile calendar\nBug: 119800099\nChange-Id: Iaef9d0d528ff34c1636237cdcce6e8639c47c8ed\n"
    },
    {
      "commit": "605a5fe91694d8a90c02fb01967081f55878a125",
      "tree": "9c9365246d523920cc4c9180f648243408ac767e",
      "parents": [
        "20d1c942c0e841920eac92f68c6d3e7f2a2135b4"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 24 14:05:21 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Apr 25 14:33:33 2019 +0000"
      },
      "message": "jitzygote: Fix DCHECKs\n\nTest: boot device with libartd and jitzygote\nBug: 119800099\nChange-Id: I8f3a158cac22ce9ec221cd287bdddbb109c37b54\n"
    },
    {
      "commit": "3db3d37dcd3ca8e232a260ce71ac540f33fcf584",
      "tree": "e2a1c6a9290ddb931d32c100a3b2f9ee179820f3",
      "parents": [
        "467b692bfa088098d57947ed3d764fbf1a072974"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 17 18:19:17 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 24 17:09:14 2019 +0000"
      },
      "message": "Invert IsUsingDefaultBootImageLocation to IsUsingApexBootImageLocation.\n\nSome tests are picking up the jit-zygote path, which is not intended.\n\nInvert the flag so that if in doubt, we don\u0027t execute the experiment path.\n\nBug: 119800099\nChange-Id: Ief3ff353cc25fa81157a75d917814982f3836ed0\n"
    },
    {
      "commit": "a3b31ba6ee409f11889af604d91d8786458ea48f",
      "tree": "6efccf253658a433d87cacbf1fc686bf9ab9a319",
      "parents": [
        "b10f02828b869cf6505bbd6eef6d2ae332c4e91b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 14 20:10:16 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 14 20:48:56 2019 +0000"
      },
      "message": "Fix ProfilingInfo race.\n\nThe field can be cleared concurrently, so fetch it only once.\n\nTest: test.py\nBug: 119800099\nChange-Id: I097a9c6f2175da7a027255c6b81954554bdbcff6\n"
    },
    {
      "commit": "7989ac9ef0f50db26ce5844e7e6f9a659994c244",
      "tree": "a71974b358b1b06cdd9d740b83cbab41493db4b3",
      "parents": [
        "6dfdfef85b210dc104a7cd221c6717e1a2123a13"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 10 12:42:30 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 12 16:10:51 2019 +0000"
      },
      "message": "Save the JIT compiled code when the class isn\u0027t initialized yet.\n\nWhen a class isn\u0027t initialized, we put resolution stubs to its\nstatic methods. In order to fetch the compiled code at the point of\ninitialization, save it in the profiling info.\n\nBug: 119800099\nTest: start an app, no JIT compilation of boot classpath methods\nChange-Id: I32b947318dbcb1010c94a11b51ea39d992d247e3\n"
    },
    {
      "commit": "d03e8dd6c824352fb2281d333d4e134458776fa1",
      "tree": "b53f5a2257c590e4b1f5fed440f2f38f396ccf46",
      "parents": [
        "408f7d0db69f4aaa79afc5a652673166aff525be"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 10 23:13:20 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 11 15:05:20 2019 +0000"
      },
      "message": "Fix longstanding JIT bug in interaction with class initialization.\n\nThe entrypoint of a method of a class being initialized was\nwrongly updated to pointing to compiled code when it should stay\nthe resolution stub.\n\nTest: 694-clinit-jit\nBug: 119800099\nBug: 130337355\nChange-Id: I1bd5769c950b62330d8ae5c34cc08111b2fb4c04\n"
    },
    {
      "commit": "d355acfaf613d4020f1c2f4b526275c624fe887a",
      "tree": "c40094e3a866cdc27426c713108a67e5eda260b9",
      "parents": [
        "df1a7d458e3f4b5410562e7d86a3343155a44ce0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 21 17:09:40 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 03 08:07:46 2019 +0000"
      },
      "message": "Clean up Object size related read barriers.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --interpreter\nTest: testrunner.py --host --interpreter --gcstress\nBug: 119486698\nChange-Id: I831838f230ebdd9e540462b2de56271895a01fad\n"
    },
    {
      "commit": "c524e9e7e767be0801cf110310039635698c1532",
      "tree": "cd11699dce8c175a0940a583f5ea02ce89f73a85",
      "parents": [
        "2e1ec835d08ca0ab81b1c24436f659f952ace260"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 26 10:54:50 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 26 17:06:55 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify mirror::Class.\n\nAnd move function definitions that rely on obj_ptr-inl.h\nfrom class.h to class-inl.h .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I5ccc765d0a02b1d37cb39ed68c17b8456faf92ea\n"
    },
    {
      "commit": "5708376183c4e2d4456a191955c5060e404a9f0a",
      "tree": "4afed897b6e71c45b4f51ae9536d5bb6da7ec024",
      "parents": [
        "3c83921510c849cd43b90ab6094abce232c8c088"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 05 09:24:45 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 05 15:40:35 2019 +0000"
      },
      "message": "Revert \"Remove code size from OatQuickMethodHeader\"\n\nThis reverts commit 131f23a4c2c34b689c07e6efd05cea74190f0113.\n\nBug: 123510633\nBug: 127305289\n\nReason for revert: b/127305289\n\nChange-Id: I59905779fe8c7d7551c0fa6c8693fb64eb6760b2\n"
    },
    {
      "commit": "131f23a4c2c34b689c07e6efd05cea74190f0113",
      "tree": "c0c1927bd770f0224c6aed5eaccb13765a7cc57d",
      "parents": [
        "438cc2b34be2a5d114a50ba6cdef22f9045d863a"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jan 29 18:52:12 2019 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 14 09:44:47 2019 +0000"
      },
      "message": "Remove code size from OatQuickMethodHeader\n\nThis saves from 0.75% from oat file size.\n\nBug: 123510633\nChange-Id: Ibf0d45d5d84057ee45a3584a4b69a7c0487443bf\n"
    },
    {
      "commit": "226805d9b81ba442251d0e2c4baedc36fcda6592",
      "tree": "3a256b1d36894d8d43ec9650f2a3f55c90c4730c",
      "parents": [
        "96453b7d6aa445c6609aa465df5d66ae0beb7956"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 14 10:59:02 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 19 09:22:01 2018 +0000"
      },
      "message": "Deoptimize zygote compiled methods in DeoptimizeBootImage.\n\nThose methods don\u0027t get compiled with the \"debuggable\" flag,\nso we need to deoptimize them.\n\nAlso fix a bug revealed by the new test where a concurrent\nJIT collection happens when trying to disable it.\n\nAlso make DeoptimizeBootImage truly mutator lock exclusive.\n\nTest: 689-zygote-jit-deopt\nChange-Id: I00607dbe100350c5328293c35c87946fa97924b8\n"
    },
    {
      "commit": "889e29aae6a7cbd3c6f8dae44f67e054e083a8b6",
      "tree": "b3954038ef36a8ad925f493a770802f8ade60150",
      "parents": [
        "6b36d8025de5237b57e7bf23033bfc61a112d6cd",
        "afc60cd6ddcd15353698bb453716313dea241ef8"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Dec 11 13:25:17 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 11 13:25:17 2018 +0000"
      },
      "message": "Merge \"Cleanup native debug interface api.\""
    },
    {
      "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": "ae982f976866a709cf2465d203b2fe83420a37f4",
      "tree": "88085ec635a0d45de7c2360adb869a8a2f150329",
      "parents": [
        "c1baad2f913cbe37c7b634499ae23a10dd60d278"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Dec 08 12:31:10 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Dec 08 12:31:10 2018 +0000"
      },
      "message": "Remove CHECK given jvmti deallocates memory.\n\nMissed from https://android-review.googlesource.com/c/platform/art/+/844516\n\nbug: 120632268\nTest: com.android.server.wifi.test\nChange-Id: I18eacc329ddb7a3708e45fc2b4fefe448c8757f2\n"
    },
    {
      "commit": "1c1c6e67d858db7fd9296260d4e6e8cff84a0364",
      "tree": "df3a2b3e594be74554c97e006fc4d3271bcabaad",
      "parents": [
        "58431a7cf863b2eb7fe25eff6a28ec376f2f151d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 07 14:46:50 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 07 14:46:50 2018 +0000"
      },
      "message": "Remove CHECK and don\u0027t free code/data in zygote space.\n\njvmti can redefine classes and request free-ing code generated\nby the zygote. In this case, don\u0027t free the memory, as that would\nactually lead to dirty memory, which is opposite the idea of\nsaving memory.\n\nbug: 120653173\nTest: com.android.server.wifi.test\nChange-Id: I8552f075e68e6646f06842a8abf7ec65da6be292\n"
    },
    {
      "commit": "ce9ed3669d041d9eb2f5489596f133248d90f497",
      "tree": "f95fc9d6fc78119686fe91db5c2aaabd31b6abb1",
      "parents": [
        "69431d3ba1c560f0b23bd2ad6257949deb679aa7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 29 03:19:28 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 06 14:12:34 2018 +0000"
      },
      "message": "Enable JIT in zygote.\n\nbug: 119800099\nTest: boot test\nChange-Id: I92dc59adeaf1202a984d363b1420ef26e53ebe84\n"
    },
    {
      "commit": "ef6b2aa28fec148d3fe635a34260fde8c89622c7",
      "tree": "c00a942a4af6eab805e78b26ce779b23166e1212",
      "parents": [
        "8f50b2c27f9b32726bbadfcebba910640b94036e",
        "c7d878d4be3f0971d4b86266308c7540a26c2856"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 28 16:43:42 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 28 16:43:42 2018 +0000"
      },
      "message": "Merge \"Revert^4 \"ART: Add StackVisitor accepting a lambda\"\""
    },
    {
      "commit": "e36e7f2226e4e08b7a7094f78cb80bbe0e729c2b",
      "tree": "0787ae19a232728121a60791f3a18094529120f1",
      "parents": [
        "244470afafdb1c5aba17507ef793d316b9c4d038"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Nov 14 14:21:23 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Nov 27 17:31:01 2018 +0000"
      },
      "message": "Store ImtIndex in ArtMethod.\n\nThis avoids recalculation and reduces pressure on the thread local cache.\n\nThis halves the time we spend hashing from 2% to 1% (maps on device).\n\nTest: ./art/test.py -b --host --64\nChange-Id: I2407bd9c222de4ddc6eea938908a1ac6d7abc35b\n"
    },
    {
      "commit": "80e6a0917361273d471af731fee123f6b9e5e094",
      "tree": "16ffc3af15e57113e073f97955b5675244ef91f5",
      "parents": [
        "5ad3adeb0595b9cb5ada6185f0d5f689dfae0ba4",
        "7a2c7c2f7062d9fef21b72ff9c10ca8ef863eb8b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 22 08:59:26 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 22 08:59:26 2018 +0000"
      },
      "message": "Merge \"Refactor code around JIT creation.\""
    },
    {
      "commit": "1afdfe681436db495276d853709116c39de40c4d",
      "tree": "a2fe476efb313455090b419b7a83971b7f5ec29f",
      "parents": [
        "d52a6f402fac600e7432cfd59a1298659625a6d3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 21 09:38:10 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 22 08:58:15 2018 +0000"
      },
      "message": "Wait until inline cache is accessible in GetProfiledMethods.\n\nBug: 119844538\nTest: test.py\nChange-Id: I7ee0718bb866652b1913496eb3ecd3beee1d46c3\n"
    },
    {
      "commit": "7a2c7c2f7062d9fef21b72ff9c10ca8ef863eb8b",
      "tree": "909d18e31d319313a0729019258418980c810d79",
      "parents": [
        "c754cc8e1c2dbcb1331ec2bed3ea0787bdd2b5c3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 20 10:03:13 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 21 11:09:49 2018 +0000"
      },
      "message": "Refactor code around JIT creation.\n\n- Create the JIT early on.\n- Have dedicated zygote spaces, that get assign after the fork.\n- Re-parse compiler options after fork to take into account customization\n  of debug flags by the child.\n\nCurrently, we only create the thread pool in the child, so the zygote\nisn\u0027t jitting yet.\n\nBug: 119800099\nTest: test.py, device boots\nChange-Id: I591ce933ebf54a67937ab1d05206534f55ef2f65\n"
    },
    {
      "commit": "c7d878d4be3f0971d4b86266308c7540a26c2856",
      "tree": "041a6d897df81ae64f25c211f16e8640959a35f5",
      "parents": [
        "d295a75d952742604eaae0530daea19dd6fd782c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 19 18:42:06 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 19 17:09:07 2018 -0800"
      },
      "message": "Revert^4 \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit ec43a01e0ac948c59d5b1f9c3812f2901b48942a.\n\nReason for revert: Added missing code.\n\nBug: 115837065\nTest: m test-art-host\nChange-Id: Id30ccdf9aa9a6e56a914254793e399f2712c882d\n"
    },
    {
      "commit": "ec43a01e0ac948c59d5b1f9c3812f2901b48942a",
      "tree": "57e1a23dcc0beba8e98841b8cf063f6153b08c9b",
      "parents": [
        "3d477f3a3eea757a49ca621cc579f711f22fccdd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Nov 17 13:10:40 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Nov 17 13:10:40 2018 +0000"
      },
      "message": "Revert \"Revert^2 \"ART: Add StackVisitor accepting a lambda\"\"\n\nThis reverts commit 3d477f3a3eea757a49ca621cc579f711f22fccdd.\n\nBug: 115837065\n\nReason for revert: Breaks jdwp tests.\n\nChange-Id: I09249331798970751a20c6b41675c3efef72adfb\n"
    },
    {
      "commit": "3d477f3a3eea757a49ca621cc579f711f22fccdd",
      "tree": "b4b402d0181610c62062c8c597ef30ee2840b6b1",
      "parents": [
        "54c7da9c50ee85ade636605cd6ea18b4c2bc69fa"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 16:40:45 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 10:13:38 2018 -0800"
      },
      "message": "Revert^2 \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit 8248490f24e8582ce2ead8cd878d8a2c38310a48.\n\nReason for revert: Fixed instrumentation.cc\n\nBug: 115837065\nTest: m test-art-host\nChange-Id: I484833f4712c835fcaf3452dca4cae5b031d5a7d\n"
    },
    {
      "commit": "b9f1af59681a73a33c86dd5919cc11874623d9d8",
      "tree": "d31e900f951201e406c524efd75318ebdbe4d649",
      "parents": [
        "b321ac28f726a7ed41f277382d85702ffdfbe00f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 16 10:30:29 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 16 10:30:29 2018 +0000"
      },
      "message": "Small cleanups in jit_code_cache.\n\nMake methods private, remove dead code.\n\nTest: test.py\nChange-Id: I4554d35c64115c6dd5308b6d509659e5c60346b1\n"
    },
    {
      "commit": "c980df6125e53bbf8e5e7e8eecb3f9b0125bae5e",
      "tree": "966f80eb3959b94a5508525b0726e05f53ac7286",
      "parents": [
        "3d719ed950772e1ec70fe082863e907d5acd3fcf",
        "8248490f24e8582ce2ead8cd878d8a2c38310a48"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 01:18:34 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 16 01:18:34 2018 +0000"
      },
      "message": "Merge \"Revert \"ART: Add StackVisitor accepting a lambda\"\""
    },
    {
      "commit": "8248490f24e8582ce2ead8cd878d8a2c38310a48",
      "tree": "f542af6560561526fc413e361e3323a615b5429c",
      "parents": [
        "36f8d22c672498753b9edc66ba11acc9816b2a17"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 00:47:49 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 00:47:49 2018 +0000"
      },
      "message": "Revert \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit 36f8d22c672498753b9edc66ba11acc9816b2a17.\n\nReason for revert: Seems to be breaking test 687\n\nBug: 115837065\nChange-Id: I83bb1a9d76cc701c3d582778e5047ebd5dab5d29\nTest: TreeHugger\n"
    },
    {
      "commit": "e09485f761220ff16129d25b773ab968d3c2d76b",
      "tree": "87f93a1c3e2d2c7805859231c9cb7dd92a778bba",
      "parents": [
        "9e70fafa9ca3bf055fe1e9d8cba4ddb4ee090776",
        "36f8d22c672498753b9edc66ba11acc9816b2a17"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 15 21:44:18 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 15 21:44:18 2018 +0000"
      },
      "message": "Merge \"ART: Add StackVisitor accepting a lambda\""
    },
    {
      "commit": "a7edd0d02f3aa2e6df31d6bd1de78e48797e8fc2",
      "tree": "988a26723769395801d40d266192994eed369b22",
      "parents": [
        "c925fe6afb9d7c100b5f7c889a98c147c66e1742"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 07 03:18:16 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 07 05:54:40 2018 +0000"
      },
      "message": "Fix JIT creation so it picks up runtime flags.\n\nbug: 119063276\nTest: benchmarks, take a bugreport, check that JIT is enabled.\nTest: atest ZenModeFilteringTest with libartd and JIT at first use.\nChange-Id: Id9f0be316467064dc21edfb0a0493149678630e0\n"
    },
    {
      "commit": "36f8d22c672498753b9edc66ba11acc9816b2a17",
      "tree": "7a7195bf16db14d7f56f94a4d6421f6837b2f686",
      "parents": [
        "a53da8f8170ddaff3e4160641938ba1b7806202c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 08 08:13:42 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 02 16:01:30 2018 -0700"
      },
      "message": "ART: Add StackVisitor accepting a lambda\n\nTo simplify implementation of visitors. Rewrite some\nvisitors.\n\nBug: 115837065\nTest: mmma art\nTest: m test-art-host\nChange-Id: I04172d7626b702c1d69c63eba65526378935a25d\n"
    },
    {
      "commit": "ad28f5e02b3adc8ee7fec2f323eeb42bc96d596a",
      "tree": "53722e481afd203846ec45bf3d65ef3e32b5d419",
      "parents": [
        "fe79b5939696c87f66d9d39540fe0f38369c5158"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Oct 17 09:08:17 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Oct 31 06:32:12 2018 +0000"
      },
      "message": "ART: add hook for framework to set SELinux context\n\nAdds a new zygote hook for system server, nativePostForkSystemServer,\nso the process can transition between the system_server_startup and\nsystem_server SELinux domains.\n\nMemory resources for the JIT are allocated in the hook as setting the\nSELinux domain with setcon() requires that the process is still single\nthreaded.\n\nBug: 66095511\nTest: device boots\nTest: art/test.py --host --64\nChange-Id: Ic840634c5c59906b8d344c2edffafeb9b13a409f\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"
    }
  ],
  "next": "98ea9d9d82ab078ca10fa7f8e02eddda94cf1d98"
}
