)]}'
{
  "log": [
    {
      "commit": "0fa1786bdcc333873ed65a1f77a4669d5701ac5e",
      "tree": "3ee1a5ead68150d60c0a72efa4c85b7db5b3e689",
      "parents": [
        "0d2b2ad6cd9ca650d7a3f85a42afaf518cbfa4e0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 24 13:43:05 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 30 09:43:57 2017 -0700"
      },
      "message": "Avoid JVMTI global deoptimization when possible\n\nThis changes the openjdkjvmti plugin to be more controlled about the\nsituations that it will deoptimize everything. Most notably this makes\nthe plugin deoptimize only individual methods for breakpoints instead\nof doing a full deoptimization. It also doesn\u0027t deoptimize for the\nJVMTI_EVENT_EXCEPTION method, since our throwing code will always send\nthe appropriate event.\n\nImpact:\n    Exoplayer benchmark with breakpointlogger setting a breakpoint on\n    a method that is never called.\n\n    The agent is the tools/breakpoint-logger agent.\n\n    \u0027art\u0027 options are for all runs were:\n        --64\n        -Xusejit:true\n        -Xcompiler-option --debuggable\n    \u0027art\u0027 options for \u0027Pre change\u0027 and \u0027Post change\u0027 runs included:\n        -Xplugin:libopenjdkjvmti.so\n        \u0027-agentpath:libbreakpointlogger.so\u003dLbenchmarks/common/java/BenchmarkBase;-\u003erun()V@0\u0027\n\n    Clean run (no agent loaded):\n        Running FMP4 x 1 : 53\n        Running TS x 1 : 144\n        Running FMP4 x 2500 : 3309\n        Running TS x 100 : 3584\n        ExoPlayerBench(RunTime): 6977000.0 us.\n    Pre change:\n        Running FMP4 x 1 : 159\n        Running TS x 1 : 9395\n        Running FMP4 x 2500 : 298591\n        Running TS x 100 : 944447\n        ExoPlayerBench(RunTime): 1.243226E9 us.\n    Post change:\n        Running FMP4 x 1 : 87\n        Running TS x 1 : 495\n        Running FMP4 x 2500 : 2939\n        Running TS x 100 : 3947\n        ExoPlayerBench(RunTime): 6979000.0 us.\n\n    Post change vs clean run is well within margin of error for this\n    benchmark.\n\nTest: ./test.py --host -j50\nTest: ./art/tools/run-prebuild-libjdwp-tests.sh\n\nBug: 62821960\nBug: 67958496\n\nChange-Id: I63ef04f71c36c34d8534651d0c075921a836ec08\n"
    },
    {
      "commit": "2161193652e925a2b450514f4e445ccd2fb660b3",
      "tree": "0fdbb54879de0b7b98509bede399cccfb0d4b34c",
      "parents": [
        "8b96c164a11284c07886fca9e4a4a0e15d33e816"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 26 13:07:39 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Sep 27 14:32:20 2017 +0000"
      },
      "message": "Ensure that OSR doesn\u0027t break local-variable get/set\n\nWe had a bug where we would on-stack replace a method with a modified\nlocal variable. Thanks to inlining \u0026 load-store elimination of local\nvariable values this could cause the change to the variable to be lost.\nWe fixed this by giving plugins a way to notify the runtime they are\ninterested in a particular method.\n\nBug: 66959663\nBug: 66933582\n\nTest: while ./test/run-test --host --prebuild -O --jit 1935; do; done\nTest: ./test.py --host -j50\nChange-Id: Ic001b8a9d8d0bd9ce292e807752c86a505f85d36\n"
    },
    {
      "commit": "77fee87b262e969b29a9ac121a8bcbf87b68d9ce",
      "tree": "3280ba8d887045217bfbcb81eb624f571eeee7d0",
      "parents": [
        "ec995142998f6c7371734e6df95b5e2c80b18d27"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 14:51:49 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 14 09:57:03 2017 -0700"
      },
      "message": "Add support for JVMTI monitor events.\n\nAdds support for the JVMTI can_generate_monitor_events capability and\nall associated events. This adds support for the\nJVMTI_EVENT_MONITOR_WAIT, JVMTI_EVENT_MONITOR_WAITED,\nJVMTI_EVENT_MONITOR_CONTENDED_ENTER, and\nJVMTI_EVENT_MONITOR_CONTENDED_ENTERED events.\n\nBug: 65558434\nBug: 62821960\nBug: 34415266\n\nTest: ./test.py --host -j50\n\nChange-Id: I0fe8038e6c4249e77d37a67e5056b5d2a94b6f48\n"
    },
    {
      "commit": "d78ddec5f8eaf1f27e9043f6f42be90149ccb966",
      "tree": "e3c21f93e419ba35486cf8f641d816523a06b9a3",
      "parents": [
        "66f43b988ad84568a46c1760b314723e9229e6d0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Apr 18 15:20:38 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Apr 19 09:44:25 2017 -0700"
      },
      "message": "Implement can_generate_native_method_bind capability\n\nThis capability lets one observe and even replace the implementations\nof native methods when they are bound.\n\nTest: ./test.py --host -j40\n\nBug: 37432636\nChange-Id: I2432a8e4da1a677e8011ce495296f4ab9f42eb3e\n"
    },
    {
      "commit": "b0f1192bfac159008e1f2367751083740ba05698",
      "tree": "4b5d4385c27b600f5488962d0f7f6f00d9836843",
      "parents": [
        "a7e38d8aaacfca85b40b5df654f85c0979968672"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jan 23 14:25:17 2017 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jan 23 14:44:23 2017 -0800"
      },
      "message": "Add ClassPreDefine hook.\n\nThis hook is called prior to defining a class for the first time. It\nallows callbacks to modify the dex-file used to load the class if they\nwish. The event handler is responsible for ensuring that the returned\ndex-file is set-up correctly.\n\nBug: 31684920\nTest: mma -j40 test-art-host\nChange-Id: Iaed79c1597913148ead795e033a0a10a4ebe6b2b\n"
    },
    {
      "commit": "4886411a81077e893a6e38c56938a252888ddd0e",
      "tree": "62f6effd04ae42206c76510ab64b5000b9c45a96",
      "parents": [
        "2c19ea93088d7cd187524f49137417279e99096d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 19 17:23:17 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 19 19:35:49 2017 -0800"
      },
      "message": "ART: Add runtime phase callback\n\nAdd callback that describes the current runtime phase, one of\nstarting, initialized and death. Add test.\n\nBug: 31684920\nTest: m test-art-host-gtest-runtime_callbacks_test\nChange-Id: I08ae7c45851572f8b3e446c07f0498f66bb032d3\n"
    },
    {
      "commit": "a5814f9de6009cc1763523109f50aae6bd1ff99e",
      "tree": "4b09ef54cd9db04dbf87ec8374d5cfc336f9c6ef",
      "parents": [
        "ac30fa2151095d2b5fe42f169a02ed09fea312b4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 18 21:43:16 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 19 16:09:02 2017 -0800"
      },
      "message": "ART: Add SigQuit Callback\n\nAdd callback being triggered when the runtime handles SigQuit.\n\nBug: 31684920\nTest: m test-art-host-gtest-runtime_callbacks_test\nChange-Id: I23e3b256c654b6078c79b3897439d893ea79d96e\n"
    },
    {
      "commit": "0f01b583c3952d0219696480654a0db8fac4b661",
      "tree": "33184022e0c9bc0a6af4d89b21864fd460f32df4",
      "parents": [
        "04bbb5be5b9c0f0b3a72116353d23ea63c8bc5e9"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 18 15:22:37 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 19 15:12:12 2017 -0800"
      },
      "message": "ART: Add ClassLoadCallback\n\nAdd callback for class-load and class-prepare events. Move Dbg\nover. Add tests.\n\nBug: 31684920\nTest: m test-art-host-gtest-runtime_callbacks_test\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost\nChange-Id: I871f6b3c54448fd6ece8d9a7571b2042be50d525\n"
    },
    {
      "commit": "04bbb5be5b9c0f0b3a72116353d23ea63c8bc5e9",
      "tree": "51ee41e14d6bfccc88ccde91938cac901c0e39a9",
      "parents": [
        "a58bc2e74441ac89cb706b49c5a6d096df97080b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 19 17:49:03 2017 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 19 15:12:06 2017 -0800"
      },
      "message": "Revert \"Revert \"ART: Start RuntimeCallbacks\"\"\n\nThis reverts commit bf6331a45f730e1f1044af2ce43bceda660ae6fc.\n\nSwitch to using the mutator lock.\n\nBug: 31684920\nTest: m test-art-host-gtest-runtime_callbacks_test\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost --debug\nChange-Id: I6ce0f71de2aa9f90cd23cfca7723a793b560b16b\n"
    },
    {
      "commit": "bf6331a45f730e1f1044af2ce43bceda660ae6fc",
      "tree": "66013474dc85b2a868d5fad2506c8674a086fa1a",
      "parents": [
        "13093d455b8266338fd713b04261c58e9dc2b164"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 19 09:02:50 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 19 09:02:50 2017 +0000"
      },
      "message": "Revert \"ART: Start RuntimeCallbacks\"\n\njdwp tests failing with:\n    STDERR\u003e dalvikvm32 E 01-18 23:14:50 12180 12198 thread-inl.h:137] holding \"runtime callbacks lock\" at point where thread suspension is expected\n\nBug: 31684920\n\nThis reverts commit 13093d455b8266338fd713b04261c58e9dc2b164.\n\nChange-Id: I94e4154e273d006eecdd485607dcfd96392d6a00\n"
    },
    {
      "commit": "13093d455b8266338fd713b04261c58e9dc2b164",
      "tree": "b4c5e54ce8a74af2f8929df089133967ea7f7274",
      "parents": [
        "3a5e34b65727d2c9e7e6ebe45c337dae0d0398a4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 17 21:40:35 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 18 19:48:37 2017 +0000"
      },
      "message": "ART: Start RuntimeCallbacks\n\nAdd a central RuntimeCallbacks structure to handle certain interesting\nruntime events.\n\nIn a first iteration, add ThreadLifecycleCallback with ThreadStart and\nThreadStop. Move Dbg over to ThreadLifecycleCallback.\n\nAdd a test.\n\nBug: 31684920\nTest: m test-art-host-gtest-runtime_callbacks_test\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost\nChange-Id: Ie0f77739a563207bfb4f04374e72dc6935c40b4f\n"
    }
  ]
}
