)]}'
{
  "log": [
    {
      "commit": "af8bcf83535cd7bf5651ada2fb08a0ba9c5191d6",
      "tree": "f029668c26269484652e9432fab3a246be81d2e7",
      "parents": [
        "da2d78ba97d177b80e0e9528362bcebc1fd31f0f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 22 14:55:04 2016 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 29 11:51:03 2016 +0100"
      },
      "message": "Fix event reporting from the debugger thread\n\nThe debugger thread may trigger events (like CLASS PREPARE after the\ninitalization of a class while processing a command).\n\nThis CL removes the incorrect CHECK that makes the runtime abort in\nthis case. However, we do check that only the debugger thread can\nreport an event while it is already processing a command.\n\nBug: 33032664\nTest: art/tools/run-jdwp-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX64\u0027\nChange-Id: I32a284cfb4df6eb44eac27bbdcabd3c426d726ce\n"
    },
    {
      "commit": "5c657fe8e3afdce77dc610446f37a43865cff702",
      "tree": "1f9fe466058b7512036b27a5b22f7720eb00729d",
      "parents": [
        "2ab98309c0fc7b3c7451205b2371db5c34b05d49"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 03 15:12:29 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 03 15:13:06 2016 +0000"
      },
      "message": "Pass some arguments by const reference.\n\nTest: Rely on TreeHugger.\nBug: 32619234\nChange-Id: Ia26277893641dcb3562eaeacaec4e089a978d56a\n"
    },
    {
      "commit": "709b070044354d9f47641f273edacaeeb0240ab7",
      "tree": "3a8ac051d7c35076303984d0d892cdd396b60427",
      "parents": [
        "1a4de6a2453a3ad0310aca1a44e7e2d3b6f53bc1"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Oct 13 09:12:37 2016 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Oct 18 14:10:04 2016 -0700"
      },
      "message": "Remove mirror:: and ArtMethod deps in utils.{h,cc}\n\nThe latest chapter in the ongoing saga of attempting to dump a DEX\nfile without having to start a whole runtime instance.  This episode\nfinds us removing references to ArtMethod/ArtField/mirror.\n\nOne aspect of this change that I would like to call out specfically\nis that the utils versions of the \"Pretty*\" functions all were written\nto accept nullptr as an argument.  I have split these functions up as\nfollows:\n1) an instance method, such as PrettyClass that obviously requires\nthis !\u003d nullptr.\n2) a static method, that behaves the same way as the util method, but\ncalls the instance method if p !\u003d nullptr.\nThis requires using a full class qualifier for the static methods,\nwhich isn\u0027t exactly beautiful.  I have tried to remove as many cases\nas possible where it was clear p !\u003d nullptr.\n\nBug: 22322814\nTest: test-art-host\nChange-Id: I21adee3614aa697aa580cd1b86b72d9206e1cb24\n"
    },
    {
      "commit": "c4f3925490a73da8dc74884a1deb965d4ecaf14e",
      "tree": "7fe566827f8ab903af1acb5697c86a6efe3187b3",
      "parents": [
        "18f7de841fee3ca6f0c04e7caa57c3ce76b36231"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 05 18:32:08 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 06 13:55:58 2016 -0700"
      },
      "message": "Move remaining jobject related functions to use ObjPtr\n\nAlso added ObjPtr::DownCast.\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I59c253211dc435579ffdfd49f856861ab13d262c\n"
    },
    {
      "commit": "3398c7874e002beaa6c2b2fadf183e7d1ddad23a",
      "tree": "7db754b5b0c3a6c68bc1f91d7cb2477f534d2ad3",
      "parents": [
        "462e21cc8d28a4d48342cf0f634bd1ecc63647d7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 30 10:27:43 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 03 14:06:27 2016 -0700"
      },
      "message": "Move ArtField to ObjPtr\n\nAdded EXPECT_OBJ_PTR_EQ and variants to gtests.\n\nFixed moving GC bugs in:\nClassLinker::CreatePathClassLoader\nClassLinkerTest: StaticFields\n\nObjPtr Decode call sites: 186 -\u003e 181.\n\nSome tests fail due to ResolvedFieldAccessTest, will fix in follow\nup CL.\n\nBug: 31113334\n\nTest: test-art-host CC baker\n\nChange-Id: I8b266ad00f3c20c8cbe7cfdf280d175083df0b88\n"
    },
    {
      "commit": "0795f23920ee9aabf28e45c63cd592dcccf00216",
      "tree": "ff3f880c5e84f3316532b47d0e9a7729ade848ac",
      "parents": [
        "d1224dce59eb0019507e41da5e10f12dda66bee4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 27 18:43:30 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 29 17:31:09 2016 -0700"
      },
      "message": "Clean up ScopedThreadStateChange to use ObjPtr\n\nAlso fixed inclusion of -inl.h files in .h files by adding\nscoped_object_access-inl.h and scoped_fast_natvie_object_access-inl.h\n\nChanged AddLocalReference / Decode to use ObjPtr.\n\nChanged libartbenchmark to be debug to avoid linkage errors.\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I4d2e160483a29d21e1e0e440585ed328b9811483\n"
    },
    {
      "commit": "3fec9ac0d5af1358d216eb2fdc2000ec0205f3f0",
      "tree": "f38d8d8aae51f53e7ee6b474f47597b784fc2316",
      "parents": [
        "0cfe19af3b7395658210ea6044a65c9811962a7a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 13 10:47:28 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 26 10:59:22 2016 -0700"
      },
      "message": "ART: Use libbase logging\n\nMove most of our logging infrastructure over to system/core/base.\nRetain VLOG.\n\nUsing unified Android infrastructure has two main advantages. First,\nit reduces the complexity/maintenance burden in ART. Second, it\nallows to detach logging for the cases where we do not want or need\na runtime, e.g., dexdump, the disassembler, etc. As a part of the\nlatter, libbase is also supported for all hosts (including Windows).\n\nFrom a developer viewpoint, there are minor behavior changes for the\nLOG statements (see above), but otherwise usage is the same. Explicit\nseverity enum items are in the android::base namespace now.\n\nBug: 31338270\nTest: m test-art-host\nChange-Id: I5abcb2f45f5b03d49951874c48544f72a283a91b\n"
    },
    {
      "commit": "bdf7f1c3ab65ccb70f62db5ab31dba060632d458",
      "tree": "25cc77adfeb05232d0ab00aa561a693f1d71745c",
      "parents": [
        "d7eabc2cc1a88c1f7f927da61246ae65aab0626c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 16:38:47 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 17:02:53 2016 -0700"
      },
      "message": "ART: SHARED_REQUIRES to REQUIRES_SHARED\n\nThis coincides with the actual attribute name and upstream usage.\nPreparation for deferring to libbase.\n\nTest: m\nTest: m test-art-host\nChange-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518\n"
    },
    {
      "commit": "3aaa37bba53d6df0265793de48b4b0b57327e57a",
      "tree": "ce795803f0f10003eb3d96d9348da620937675b3",
      "parents": [
        "792c98bb773c8c2390f9cbf774f85be9d9a75332"
      ],
      "author": {
        "name": "jessicahandojo",
        "email": "jessicahandojo@google.com",
        "time": "Fri Jul 29 14:46:37 2016 -0700"
      },
      "committer": {
        "name": "jessicahandojo",
        "email": "jessicahandojo@google.com",
        "time": "Tue Aug 23 15:12:26 2016 -0700"
      },
      "message": "creating workflow for mirror::String compression\n\nAll-ASCII String characters are stored in 8-bit blocks\ninstead of 16-bit. The compression has not taken place, but all\nworkflow are in the code already (changing kUseStringCompression in\nstring.h file to TRUE will enable the feature)\n\nNotes: Feature works on interpreter only without optimizing\n\nTest art: m ART_TEST_INTERPRETER\u003dtrue ART_TEST_OPTIMIZING\u003dfalse\n          test-art-host\n\nAlso tested with String tests from libcore/:\n1. libcore.java.lang.StringTest\n2. libcore.java.lang.StringBufferTest\n3. libcore.java.lang.StringBuilderTest\n4. libcore.java.lang.OldStringTest\n5. libcore.java.lang.OldStringBufferTest\n\nMemory improvement is 33% (from 6.03% to 4.03%, total String memory\nfrom all apps per total memory of all apps) measured on Angler\nwith Hprof tools\n\nBug: 31040547\nChange-Id: I9cc92c265ebf1305fc06b5fc33efd83797660cce\n"
    },
    {
      "commit": "bb661c0f0cb72d4bbfc2e251f6ded6949a713292",
      "tree": "4fe7e66f3385b1955934d3ec6f02e00bde6e13b8",
      "parents": [
        "f7cda8088ec57ab1422f85f08df78e217a9f7094"
      ],
      "author": {
        "name": "Bilyan Borisov",
        "email": "bilyan.borisov@linaro.org",
        "time": "Mon Apr 04 16:27:32 2016 +0100"
      },
      "committer": {
        "name": "Bilyan Borisov",
        "email": "bilyan.borisov@linaro.org",
        "time": "Fri Apr 22 13:33:30 2016 +0100"
      },
      "message": "Refactor use of __ANDROID__ macro\n\nWe use the __ANDROID__ macro, which is provided by the toolchain, in\nnumerous places. This patch refactors the usage of this by defining a\nnew macro, ART_TARGET_ANDROID, that is being passed during build to\nART_TARGET_CFLAGS in Android.common_build.mk on the same line as\nART_TARGET. The codebase currently assumes that the existence of the\n__ANDROID__ macro implies that we are compiling art for an android\ntarget device. This is because, currently, target builds are compiled\nwith target toolchains that provide the macro, while host toolchains\ndo not.  With this change this assumption is still preserved. However,\nin a future patch we will add the ability to compile art for a linux\ntarget, and in that case the ART_TARGET_ANDROID macro won\u0027t be passed\nanymore.\n\nChange-Id:  I1f3a811aa735c87087d812da27fc6b08f01bad51\n"
    },
    {
      "commit": "4a28e1e4e02aa44aa6fd20e22d50f9d73f6279cc",
      "tree": "a80ef1c63ed7340cdbcb1f802e0cb26f00d2317f",
      "parents": [
        "8ff01690eb2796604b8927076fdde7452b4c8a60"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Feb 24 16:35:59 2016 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Feb 25 09:41:30 2016 -0800"
      },
      "message": "Support new JDWP InterfaceType.InvokeMethod command\n\nThis command is used to invoke static methods in interfaces.\n\nBug: 27218415\n\nChange-Id: Ie4dc1876a20567240267f309dc18f1aec2c1b4c2\n"
    },
    {
      "commit": "d817560c697508df0d941071c8e96152c9404def",
      "tree": "75c683f08cba17582e60ab81cc593a0727fff66f",
      "parents": [
        "3cbad24f0ee3639ac2ce2d06d61e97386df6f94b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jan 26 10:22:14 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jan 26 10:22:14 2016 +0000"
      },
      "message": "Fix non-Linux builds.\n\nDo no expose a constant only used in Linux builds in\nruntime/jdwp/jdwp_socket.cc.\n\nChange-Id: I0f1de4fd36a9013b46b1393ea0cded41bae2b751\n"
    },
    {
      "commit": "3cbad24f0ee3639ac2ce2d06d61e97386df6f94b",
      "tree": "345a3fad81306e946708a3bbb68708a4c69fa3a6",
      "parents": [
        "6a75b9e1f3d8f0703f29db12eed532867e210def"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jan 25 19:17:14 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jan 25 19:17:14 2016 +0000"
      },
      "message": "Improve gethostbyname_r use in art::JDWP::JdwpSocketState::Establish.\n\nTry a range of values for the work buffer size, instead of\nusing a fixed size.\n\nAlso, turn a couple of constants defined as macros into\nconstexprs.\n\nChange-Id: I2354bfb51935bb0cad775c13d6cae06902b4a934\n"
    },
    {
      "commit": "15f9b27adf1e1eb64a42d872f88e95ba637ce775",
      "tree": "c0f174d67ce4c447194a5a057b30b32aae3d49d7",
      "parents": [
        "8ae596fb0496d93b8d9bb5d5b162d7e6c32c39a2"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jan 21 14:01:10 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jan 21 14:01:10 2016 +0000"
      },
      "message": "Improves recent changes to art::JDWP::JdwpSocketState::Establish.\n\n(This is a follow-up CL to\nhttps://android-review.googlesource.com/#/c/197630.)\n\nCapture the size of the work buffer passed to\ngethostbyname_r in a constant and document it.\n\nAlso wrap long lines in runtime/jdwp/jdwp_socket.cc.\n\nChange-Id: Ieb0694c56611a491c5f949ce8ed22ab3795f1883\n"
    },
    {
      "commit": "0502c4467fde37469daf24526dd5ff6fd1c71708",
      "tree": "7fd9ddb8d0df9c7c6c07e2dfd9757a432803618a",
      "parents": [
        "c1d7861e511b8abcc9f3ad6fc54ff07e80dc383e"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jan 21 11:19:51 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jan 21 11:27:43 2016 +0000"
      },
      "message": "Fix JDWP host tests on Trusty.\n\nThe buffer passed by art::JDWP::JdwpSocketState::Establish\nto gethostbyname_r on Trusty was too small, leading to the\nfollowing error message during JDWP host testing:\n\nart/runtime/jdwp/jdwp_socket.cc:283] gethostbyname_r(\u0027localhost\u0027) failed: Resolver internal error\n\nThis CL doubles the size of this buffer to avoid this\nfailure.\n\nChange-Id: Ie7bb1ea8c755d869f2cc50cc2f6cc82828499706\n"
    },
    {
      "commit": "b06e28e5b9fbabe3e69b18f31bf353eaff5d0c1f",
      "tree": "18ff419c6a3b80ecff3125f13b72a8851e848ab0",
      "parents": [
        "f71b3ade9c99ce2fec2f5049ce9c5968721e1b81"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Dec 10 13:15:00 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Dec 15 15:11:50 2015 +0000"
      },
      "message": "Refactor DexFile::DecodeDebugInfo.\n\nSplit the method into two - one for locals and one for positions.\nAll uses of the method request only one of the two and it makes the\ncode slightly cleaner. The position variant requires fewer parameters.\n\nExpose additional line table information which was previously ignored\nby the decode method (prologue, epilogue, source file).\n\nChange-Id: Idf8ba98fa58ea0d2103932b5cc0af81365885107\n"
    },
    {
      "commit": "0a97fc6613d525370d9300819a3579f706d6fc67",
      "tree": "0b1239d9d22782d59acc81defe92e08afaf7d6c4",
      "parents": [
        "55a77ef5f99c2b056eb5f2820c1ff3b29c0ec270"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Nov 09 12:18:06 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Nov 09 12:18:06 2015 +0100"
      },
      "message": "JDWP: default implementation of Method.IsObsolete\n\nTo please some IDEs sending this command, adds a default\nimplementation that a method is never obsolete.\n\nBug: 25552174\nBug: https://code.google.com/p/android/issues/detail?id\u003d192784\nChange-Id: I328522e6313f2ef5474897cad15a95edd33cd15c\n"
    },
    {
      "commit": "358bcaf13ec288ee45be8fc53cb09170c1b8a8f1",
      "tree": "cee1b848ae498b4d59b88c4273b3c4544d6b430a",
      "parents": [
        "66e33f1906be899f140d5fe2a657db4e3993106e"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Oct 21 16:18:58 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Oct 21 16:22:59 2015 +0200"
      },
      "message": "JDWP: fix possible JdwpEvent memory leak\n\nFixes possible memory leak when registering new JdwpEvent but the\nCount modifier is invalid. This is done by using a std::unique_ptr\nwith a custom delete function. It also allows to easily introduce\nmore modifier checks in the future.\n\nBug: 14076832\nChange-Id: I339ffb1297165ff85ab924e5e7618d336df5612b\n"
    },
    {
      "commit": "4b8f1ecd3aa5a29ec1463ff88fee9db365f257dc",
      "tree": "d113f8a5c6b61c078256cf15c7cbb9f7c8de0390",
      "parents": [
        "114873103db3d4d6e0da42ca02bad1ea8826443b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Aug 26 18:34:03 2015 +0100"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 15 12:22:39 2015 -0700"
      },
      "message": "Use ATTRIBUTE_UNUSED more.\n\nUse it in lieu of UNUSED(), which had some incorrect uses.\n\nChange-Id: If247dce58b72056f6eea84968e7196f0b5bef4da\n"
    },
    {
      "commit": "f1d666e1b48f8070ef1177fce156c08827f08eb8",
      "tree": "772cbbe6652b32ea2be31532156295db27579390",
      "parents": [
        "897ce64153e4758663e464fb5fb339f9a7b496c8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 03 16:13:34 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 03 17:33:19 2015 -0700"
      },
      "message": "Add ScopedThreadSuspension\n\nFixes the TransitionFromRunnableToSuspended and\nTransitionFromSuspendedToRunnable pattern that was prone to errors.\n\nChange-Id: Ie6ae9c0357c83b4fc4899d05dfa0975553170267\n"
    },
    {
      "commit": "738c4c909c7668bc80b0d12f9b818061115e5c6f",
      "tree": "a19155f7c07968448509fc3311dfc7ae29f42f1d",
      "parents": [
        "c26b4512a01d46756683a4f5e186a0b7f397f251"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Sep 02 14:30:13 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Sep 02 16:30:08 2015 +0200"
      },
      "message": "JDWP: attempt to fix failure on closed connection\n\nDon\u0027t send packet if JDWP connection has been closed while\nprocessing a JDWP command.\n\nWe used to DCHECK(IsConnected()) in JdwpNetStateBase::WritePacket\nbut this is wrong when the connection has been closed by the debugger\n(client) before we sent the packet. It seems to happen more during\nJDWP tests due to how debugger and debuggee are synchronizing with\neach other.\n\nBug: 22907762\nChange-Id: I1c886382268697b4c50755b6009cceac7b8d656e\n"
    },
    {
      "commit": "aa50d3a01a4137cd89c152be5487fed23683d0ff",
      "tree": "a676638c9d43eb519214445173c1a66ba38355ac",
      "parents": [
        "f0170ded84fbcd3d9152cdbcf9ffbf74c71b03ba"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Aug 25 15:25:41 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Aug 25 15:56:54 2015 +0200"
      },
      "message": "Add missing field init in constructors\n\nAdds missing field initializations detected by Eclipse IDE.\n\nChange-Id: I5f2f32bcccb12545fc9f0b42fcec74a23dc81376\n"
    },
    {
      "commit": "3901bbc170b73b13aa5092f5709a495a1847198f",
      "tree": "eeb30634318ff2d576870131d54d24b71ad2566a",
      "parents": [
        "1f3f766d3b365d01f36b85dc19d40f754fa48533"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Aug 06 11:37:02 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Aug 06 11:38:32 2015 +0200"
      },
      "message": "Fix DDM reply buffer deallocation\n\nReply buffer is an uint8_t* allocated with new uint8_t[...] so it\nmust be deallocated with delete[], not free.\n\nChange-Id: Ib5d6387aa63f1e0393113f82602f661bbada4aa2\n"
    },
    {
      "commit": "90ef3db4bd1d4865f5f9cb95c8e7d9afb46994f9",
      "tree": "3c6f8989e0c6e027382a3c08d221ba97afd72291",
      "parents": [
        "1cf85515600d298a2c9e4de137c0926949205097"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 04 15:19:41 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 04 18:56:54 2015 -0700"
      },
      "message": "Address some comments and clean up\n\nChange-Id: I538cf204f1c89d5fc81f8fc5e5800fcf1cf87359\n"
    },
    {
      "commit": "c60e1b755c5632dfeb04c333489ede52ee5c945f",
      "tree": "9582a0ffc99e4ad11dcd5d95dd97b09bc6acc5bf",
      "parents": [
        "7b926cdacc2b67241bc9cb5f2d4b04b13ca79d0e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 30 08:57:50 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 30 08:57:50 2015 -0700"
      },
      "message": "ART: Use __ANDROID__ instead of HAVE_ANDROID_OS\n\nUse the proper define.\n\nChange-Id: I71e291ac25f5d5f0187ac9b6ef2d6872f19e6085\n"
    },
    {
      "commit": "90443477f9a0061581c420775ce3b7eeae7468bc",
      "tree": "8c74b81dfae162e0fd0ccf8d5ac50827ba815174",
      "parents": [
        "6078aec213dfaf111c29969706e8e5967cfc9bea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 16 20:32:27 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 15:13:56 2015 -0700"
      },
      "message": "Move to newer clang annotations\n\nAlso enable -Wthread-safety-negative.\n\nChanges:\nSwitch to capabilities and negative capabilities.\n\nFuture work:\nUse capabilities to implement uninterruptible annotations to work\nwith AssertNoThreadSuspension.\n\nBug: 20072211\n\nChange-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33\n"
    },
    {
      "commit": "cbc5064ff05179b97b416f00ca579c55e38cd7d9",
      "tree": "9ce221e6644ff770b8484ba8cb5581e538b88eef",
      "parents": [
        "864a2d955aa85ab989c86d7f1eeacbe0b11f8b0f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jun 01 17:33:12 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 10 09:35:08 2015 +0200"
      },
      "message": "JDWP: asynchronous invoke command handling\n\nThe JDWP thread used to wait for the result of a method invocation\nrunning in an event thread. But doing that prevents the JDWP thread\nfrom processing incoming commands from the debugger if the event\nthread gets suspended by a debug event occurring in another thread.\nIn Android Studio (or another IDE), this leads to the debugger being\nblocked (with the famous message \"Waiting until last debugger command\ncompletes\" of Android Studio / IntelliJ) because it is actually\nwaiting for the reply of its latest command while the JDWP thread\ncannot process it.\n\nThis CL changes the way invoke commands (ClassType.InvokeCommand,\nClassType.NewInstance and ObjectReference.InvokeCommand) are handled\nin the ART runtime.\nThe JDWP thread no longer waits for the event thread to complete the\nmethod invocation. It now simply waits for the next JDWP command to\nprocess. This means it does not send any reply for invoke commands,\nexcept if the information given by the debugger is wrong. In this\ncase, it still sends a reply with the appropriate error code.\nThe event thread is now responsible for sending the reply (containing\nthe result and the exception object of the invoked method) before\ngoing back to the suspended state.\n\nIn other words, we add special handling for invoke commands so they\nare handled asynchronously while other commands remained handled\nsynchronously. In the future, we may want to handle all commands\nasynchronously (using a queue of reply/event for instance) to remove\nthe special handling code this CL is adding.\n\nNow the JDWP thread can process commands while a thread is invoking\na method, it is possible for the debugger to detach (by sending a\nVirtualMachine.Dispose command) before the invocation completes. In\nthat situation, we must not suspend threads again (including the\nevent thread that executed the method) because they would all remain\nsuspended forever.\n\nAlso minor cleanup of the use of JDWP constants and update comments.\n\nBug: 21515842\nBug: 18899981\nChange-Id: I15e00fb068340f3d69dc9225d8d2065246e68c58\n"
    },
    {
      "commit": "e401d146407d61eeb99f8d6176b2ac13c4df1e33",
      "tree": "17927f9bfe7d2041b5942c89832d55f9dedb24c5",
      "parents": [
        "2006b7b9b8e32722bd0d640c62549d8a0ac624b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 13:56:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 29 18:45:49 2015 -0700"
      },
      "message": "Move mirror::ArtMethod to native\n\nOptimizing + quick tests are passing, devices boot.\n\nTODO: Test and fix bugs in mips64.\n\nSaves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.\nSome of the savings are from removal of virtual methods and direct\nmethods object arrays.\n\nBug: 19264997\nChange-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d\n"
    },
    {
      "commit": "80afd02024d20e60b197d3adfbb43cc303cf29e0",
      "tree": "ef054c7b4f2a739f7cf063e0bc4c501c2c7e41b5",
      "parents": [
        "559b178e34c5d92e7932f92e5d8a981ac334606f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 19 18:08:00 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 15:59:02 2015 +0100"
      },
      "message": "ART: Clean up arm64 kNumberOfXRegisters usage.\n\nAvoid undefined behavior for arm64 stemming from 1u \u003c\u003c 32 in\nloops with upper bound kNumberOfXRegisters.\n\nCreate iterators for enumerating bits in an integer either\nfrom high to low or from low to high and use them for\n\u003carch\u003eContext::FillCalleeSaves() on all architectures.\n\nRefactor runtime/utils.{h,cc} by moving all bit-fiddling\nfunctions to runtime/base/bit_utils.{h,cc} (together with\nthe new bit iterators) and all time-related functions to\nruntime/base/time_utils.{h,cc}. Improve test coverage and\nfix some corner cases for the bit-fiddling functions.\n\nBug: 13925192\nChange-Id: I704884dab15b41ecf7a1c47d397ab1c3fc7ee0f7\n"
    },
    {
      "commit": "261bc044a3575512869586593e99e97cd8b1c321",
      "tree": "055fbf2bd3d7f836d4a872550ebe3c508eec5668",
      "parents": [
        "bdd9f2d870099e326a281ac90993b37b999c35ea"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 08 09:36:07 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed May 13 09:23:00 2015 +0200"
      },
      "message": "JDWP: more GC safety\n\nEnsures GC safety when keeping references that may be moved by GC:\n- SingleStepControl: stores ArtMethod* in a GcRoot\n- ModBasket: stores references in a StackHandleScope\n\nBug: 18166750\nChange-Id: If2b6f9ecff4cf469b50487fd863319fdfa9b9f37\n"
    },
    {
      "commit": "9d6bf69ad3012a9d843268fdd5325b6719b6d5f2",
      "tree": "a41fc22d2c89e41c86feb5ef07ebda89b1b83d90",
      "parents": [
        "b6829c2ee05124d64a19c7a52ada4a23f624fb91"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 10 12:12:33 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 29 16:59:58 2015 +0200"
      },
      "message": "JDWP: properly combine location events\n\nThis CL properly groups JDWP events at the same location: Breakpoint,\nSingle-step, Method Entry and Method Exit. This is necessary if the\ndebugger is not the only instrumentation listener. This matches the\nbehavior of Dalvik, especially for methods with a single return\ninstruction.\n\nThe interpreter was tuned so the instrumentation callbacks were\ncalled to satisfy the debugger with the idea the debugger was the\nonly instrumentation listener. This is not true when method tracing\nis enabled at the same time.\nWhen tracing is enabled, there is always a listener for MethodEntry\nand MethodExit events (art::Trace class). However, if the debugger\nis only listening to DexPcMoved event (to manage JDWP Breakpoint\nevent), it will not be notified of this event.\n\nWe now properly call all the instrumentation callbacks in the\ninterpreter and move the logic specific to debugging into the class\nDebugInstrumentationListener. This allows to properly group JDWP\nlocation events together depending on the sequence of instrumentation\ncallbacks.\n\nWe add Thread::tls_32bit_sized_values::debug_method_entry_ flag to\nremember we just entered a method. It replaces the local variable\nnotified_method_entry_event in the interpreter and simplifies the\ncode.\n\nBump oat version to force recompilation because the layout of the\nThread class is modified.\n\nBug: 19829329\nChange-Id: I204af9112e37d2eebc86661fb7c961a41c74e598\n"
    },
    {
      "commit": "2cebb24bfc3247d3e9be138a3350106737455918",
      "tree": "d04d27d21b3c7733d784e303f01f873bb99e7770",
      "parents": [
        "1f02f1a7b3073b8fef07770a67fbf94afad317f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 21 16:50:40 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 12:44:27 2015 -0700"
      },
      "message": "Replace NULL with nullptr\n\nAlso fixed some lines that were too long, and a few other minor\ndetails.\n\nChange-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb\n"
    },
    {
      "commit": "d3ed9a320a89cb9b91b2361892c043ab7e112717",
      "tree": "94d2b646e8ff9b28e0bef735804ce17a6a8be729",
      "parents": [
        "4b5673b7387804947a1605a906deee132ab28f14"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 10 14:23:35 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 13 16:15:22 2015 -0700"
      },
      "message": "Fix DCHECK failures from Class::VisitFieldRoots\n\nWe now use GetDeclaringClassUnchecked when marking roots to fix\nflaky test failures. Fixed a race condition in root marking where\nwe could have non zero field array length with a null pointer.\nFixed a race condition where we could be marking roots before\nFixupTemporaryDeclaringClass had finished. The solution is to\nonly do the declaring class CHECK if we are at least resolved.\nFixed JDWP tests by changing FieldId / MethodId to be 64 bits.\n\nAlso some cleanup.\n\nChange-Id: Ibac09519860d93c3f68a5cc964bbc91dc10a279a\n"
    },
    {
      "commit": "fac107bdddb5f2370f762e55a89847570e901245",
      "tree": "afde3114490d3deceee2be122f69a84528a5e972",
      "parents": [
        "a4c7aa2ba0485c2c876107ca6e1ce1f835ae23be",
        "692063955ae845d8bd9fa2d22a50a1e06513bdcf"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 13 17:04:58 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 13 17:04:58 2015 +0000"
      },
      "message": "Merge \"JDWP: fix thread_list deadlock\""
    },
    {
      "commit": "c785344b87221f5e4e6473e5b762e4e61fe65dcf",
      "tree": "cd32ad2c2604596a18926f04d4c313dab255ecfd",
      "parents": [
        "a29d93b380c9aeb8270e281aefbdd0c77a430d43"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 27 14:35:38 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 10 12:57:27 2015 -0700"
      },
      "message": "Move ArtField to native\n\nAdd linear alloc. Moved ArtField to be native object. Changed image\nwriter to put ArtFields after the mirror section.\n\nSavings:\n2MB on low ram devices\n4MB on normal devices\n\nTotal PSS measurements before (normal N5, 95s after shell start):\nImage size: 7729152 bytes\n23112 kB: .NonMoving\n23212 kB: .NonMoving\n22868 kB: .NonMoving\n23072 kB: .NonMoving\n22836 kB: .NonMoving\n19618 kB: .Zygote\n19850 kB: .Zygote\n19623 kB: .Zygote\n19924 kB: .Zygote\n19612 kB: .Zygote\nAvg: 42745.4 kB\n\nAfter:\nImage size: 7462912 bytes\n17440 kB: .NonMoving\n16776 kB: .NonMoving\n16804 kB: .NonMoving\n17812 kB: .NonMoving\n16820 kB: .NonMoving\n18788 kB: .Zygote\n18856 kB: .Zygote\n19064 kB: .Zygote\n18841 kB: .Zygote\n18629 kB: .Zygote\n3499 kB: .LinearAlloc\n3408 kB: .LinearAlloc\n3424 kB: .LinearAlloc\n3600 kB: .LinearAlloc\n3436 kB: .LinearAlloc\nAvg: 39439.4 kB\n\nNo reflection performance changes.\n\nBug: 19264997\nBug: 17643507\n\nChange-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c\n"
    },
    {
      "commit": "a2d40be3e64b339c6c39d59655507c597251e506",
      "tree": "011137a2bb46a6bc56e9b47c0e5c9d7978aa8ace",
      "parents": [
        "9d0ab6f0a2f08c3fa9a59e0b8742cf366d7d0feb",
        "4e5b20863898006ec6c9d120cda167d38dda6e60"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 08 16:42:38 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 08 16:42:39 2015 +0000"
      },
      "message": "Merge \"Fix JDWP race at runtime shutdown\""
    },
    {
      "commit": "692063955ae845d8bd9fa2d22a50a1e06513bdcf",
      "tree": "39771e7a445ec9ff5d6c79bb37ff268e44d8ef64",
      "parents": [
        "1b8e8cac2c96f6d2af8e7217f997a30e11c098b5"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 07 15:54:25 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 08 12:13:28 2015 +0200"
      },
      "message": "JDWP: fix thread_list deadlock\n\nLimits the scope of Locks::thread_list_lock_ locking in the debugger\nso we do not try to lock it twice when creating a JDWP id (because\ncalling Object::IdentityHashCode may need to take the lock).\n\nBug: 20048099\nChange-Id: I305dd72ccc4d2d007d1603b0d52bcfa94b6842a7\n"
    },
    {
      "commit": "2c3e77a0b91b2225fcdd3b34d8a734b85eec0579",
      "tree": "e963fb08cd1072cb78e448334582c95d37e1f95c",
      "parents": [
        "c6e949a6d93fae2351fc59ed825657adee8185dc"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Apr 02 16:26:48 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Apr 02 16:51:24 2015 +0200"
      },
      "message": "JDWP: clear exception when allocation fails\n\nClears pending exception if an allocation (requested by the debugger)\nfails and logs an error message about the failure.\n\nChecks we never leave a pending exception after processing a JDWP\nrequest.\n\nBug: 20037531\nChange-Id: I63239034a3c1ab368b0e19c2f5f756d9e2ec6a29\n"
    },
    {
      "commit": "4e5b20863898006ec6c9d120cda167d38dda6e60",
      "tree": "8cb7e98c87a4e48e6237fd2c172ae39f5b7f5a76",
      "parents": [
        "04914da1385564fca1990863d9a2690af10e1946"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Mar 24 19:03:40 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 01 12:22:52 2015 +0200"
      },
      "message": "Fix JDWP race at runtime shutdown\n\nWhen the runtime shuts down, it closes the JDWP connection with the\ndebugger. However, if a JDWP command is still being processed by the\nJDWP handler thread when we close the connection, we won\u0027t be able to\nsend its reply.\n\nBug: 19628620\nChange-Id: I20301325a347d66f3b9ef95ebe8f156abafb1f76\n"
    },
    {
      "commit": "eb07669e9784ccb41d75df180727e57fc4520e28",
      "tree": "bc15da11ee0ce906252a33371f8f59138bc5a38f",
      "parents": [
        "bce0855ca1dbb1fa226c5b6a81760272ce0b64ef"
      ],
      "author": {
        "name": "Daniel Mihalyi",
        "email": "daniel.mihalyi@mattakis.com",
        "time": "Fri Aug 22 17:33:31 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Mar 24 14:43:57 2015 +0100"
      },
      "message": "JDWP: Optimized single step during debugging\n\nFor single stepping full deoptimization and undeoptimizations were\nperformed with significant overhead, because every code will be\nexecuted in interpreted mode during a single step, even if it is not\nstrictly required.\n\nFor example, if we have a computation heavy method call and we would\nlike to step over it, that method (and all the methods called from it)\nwill run in interpreter mode. This can take so long in some cases\n(e.g. multiple minutes) that it makes debugging process unusable.\n\nThe solution for this limitation is not using full deoptimizations for\nsingle steps and force interpreter only for those methods that we are\nabout to step into, and require stack deoptimization before step outs.\n\nBug: 17750566\nBug: 18094282\nBug: https://code.google.com/p/android/issues/detail?id\u003d77984\n\nChange-Id: I683c52465883146c4c84ec47bf96f8efd920527f\nSigned-off-by: Daniel Mihalyi \u003cdaniel.mihalyi@mattakis.com\u003e\n"
    },
    {
      "commit": "1558b577907b613864e98f05862543557263e864",
      "tree": "5498d8d15f198341fe46a8badc7e7591611a09b5",
      "parents": [
        "2cfdabd2bb4833d7092819d27ef08a9e1cdffead"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Feb 25 15:05:59 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Mar 09 15:19:49 2015 +0100"
      },
      "message": "JDWP: allocate DebugInvokeReq only when requested\n\nOnly allocates thread-local DebugInvokeReq when the debugger requests\na thread to invoke a method. The JDWP thread allocates that structure\nthen attaches it to the target thread. When the thread is resumed, it\nexecutes the method. Once the invocation completes, the thread\ndetaches the DebugInvokeReq, signals the JDWP thread then suspends.\nFinally, the JDWP thread wakes up, prepares the reply with the invoke\nresult (or exception) and deallocates the DebugInvokeReq.\n\nAlso ensures GC safety for object returned by the invoke. We add the\nobject to the JDWP object registry right after the invoke. We now\nreference that object with a JDWP ObjectID instead of an Object* in\nthe DebugInvokeReq struct. This prevent from accessing a stale\nreference if the GC runs and moves the Object*.\n\nThis CL includes the following changes:\n- Move former DebugInvokeReq::ready flag to\n  Thread::tls_32bit_sized_values::ready_for_debug_invoke. It\u0027s needed\n  to know whether a thread has been suspended by an event, thus ready\n  to invoke a method from the debugger.\n- Remove DebugInvokeReq::invoke_needed: we now test if we attached a\n  DebugInvokeReq* to the thread.\n- Rename misleading FinishMethod function to RequestMethod.\n\nBug: 19142632\nBug: 18166750\nChange-Id: I351fb4eb94bfe69fcafb544d21d55ff35a033000\n"
    },
    {
      "commit": "184c9dc3bfc500134fdb2fbea0a7fab290c0abb0",
      "tree": "753a040fa1ef43651dd36fc4dfeb9377dc88e481",
      "parents": [
        "66b26662ad0c52c648c9b5ea4a99149091e842b4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 05 13:20:54 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 05 13:25:51 2015 -0800"
      },
      "message": "Fix some incorrect IsCompiler instead of IsAotCompiler\n\nFixes jdwp related issues (DDMS) when JIT is enabled.\n\nBug: 19623297\nChange-Id: I36139c70a97b529135febcf01b227e7ab9affacc\n"
    },
    {
      "commit": "ff9b747588e77f04b07dc76b2d39a82cbfc60441",
      "tree": "5daf6478955d0f3c38cb10a4864bb8564b20ee97",
      "parents": [
        "f16fe893139345dad8b05b3db3e717c6f8d079d0",
        "813b9602dadeabf33439cb0592072744f6241ce5"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 26 06:17:12 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 26 06:17:13 2015 +0000"
      },
      "message": "Merge \"JDWP: fix thread state on event suspension\""
    },
    {
      "commit": "813b9602dadeabf33439cb0592072744f6241ce5",
      "tree": "a92393ce95b3e28d7ef9190352842fe58083d4d2",
      "parents": [
        "0b6daeb0f0014474b542cbba1f713eb0dbefb7f9"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Feb 24 14:56:59 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Feb 25 17:29:21 2015 +0100"
      },
      "message": "JDWP: fix thread state on event suspension\n\nBefore suspending event thread, we ensure its state is kSuspended\nso the debugger sees it as RUNNING instead of WAIT.\n\nBug: 19103406\nChange-Id: I58b4141a958bf6a3c360f6994967fad0078ea373\n"
    },
    {
      "commit": "e4266c511ffe6a1ed472292bea06881dcbf06f7a",
      "tree": "107bf68179b24919f284246cba181a0113119660",
      "parents": [
        "0b6daeb0f0014474b542cbba1f713eb0dbefb7f9"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Oct 29 12:06:51 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Feb 24 18:00:29 2015 +0100"
      },
      "message": "JDWP: assert no pending exception when using JNI\n\nChecks there is no pending exception when creating new JDWP ids using\nJNI routines. We can create JDWP ids when executing code and report\nan event like a breakpoint.\n\nBug: 17491155\nChange-Id: I4e5851bf2261510b7776a709a2388e7ff586a77c\n"
    },
    {
      "commit": "2bf93f48bbb417b358c9e3c77911ea6ec7307c15",
      "tree": "4a3cbadecf70b370423418d80bd738fc326aa846",
      "parents": [
        "b991d334e294cb9fb75bd1c36e2435171c084cd1"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 09 18:44:05 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Feb 06 17:46:58 2015 +0100"
      },
      "message": "JDWP: update thread synchronization\n\nThis CL ensures only one thread can do JDWP stuff at a time: either\nprocessing a command coming from the debugger (JDWP thread) or\nsending an event (breakpoint, class prepare, etc) to the debugger\nbefore suspending.\n\nThe JDWP thread now uses AcquireJdwpTokenForCommand and\nReleaseJdwpTokenForCommand, respectively acquiring and releasing the\ntoken used for synchronization. On the other hand, the event threads\nnow use AcquireJdwpTokenForEvent and ReleaseJdwpTokenForEvent.\n\nDuring an invoke, the target thread needs to take the JDWP token to\nexecute the method while it\u0027s already held by the JDWP handler thread\nwaiting for the invocation to complete. To avoid both threads from\nwaiting for each other (deadlock), the JDWP thread releases the token\nand acquires it again after the invocation is complete, so the target\nthread can run safely and prevents other threads from sending events.\n\nBug: 19120467\nChange-Id: Ie3208fb940a60573769d494128cf22f0fa30fa61\n"
    },
    {
      "commit": "3be6e9d904baa13d7cf51dfc6742dea12e766b2e",
      "tree": "43ad5f3655d73243ab212eefb83169471a1d87b3",
      "parents": [
        "24898d447640c3a45e6fc9f404b049eddc5a2709"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 05 16:30:58 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 05 18:28:54 2015 +0100"
      },
      "message": "Read JDWP options from runtime\n\nAllocates JDWP::JdwpOptions on the heap and copies parsed options to\navoid the need to include jdwp/jdwp.h into runtime.h file.\n\nAlso does some minor cleanup and removes the old JDWP options parsing\ncode that became dead code after we move it to the new command-line\nparser.\n\nBug: 19275792\nChange-Id: I71901c89fbf2cc3c1901a089e2a98b4326c6ee70\n"
    },
    {
      "commit": "aaebaa0121be3b9d9f13630585304482cbcaeb4b",
      "tree": "0f47257e497fdf920c8d703d2d00adab53934a76",
      "parents": [
        "babecc483276b46d84cb83d4f01e577228827305"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Jan 26 10:55:53 2015 -0800"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Feb 04 13:29:19 2015 -0800"
      },
      "message": "art: Refactor RuntimeOptions/ParsedOptions\n\nRefactor the RuntimeOptions to be a\ntype-safe map (VariantMap, see runtime_options.h) and the ParsedOptions\nto delegate the parsing to CmdlineParser (see cmdline/cmdline_parser.h).\n\nThis is the start of a command line parsing refactor, and may include\nmore in the future (dex2oat, patchoat, etc).\n\nFor more details of the command line parsing generator usage see cmdline/README.md\n\nChange-Id: Ic67c6bca5e1f33bf2ec60e2e3ff8c366bab91563\n"
    },
    {
      "commit": "b640deca3616a7a985d146a96407c1af3ffa1592",
      "tree": "19d4b1658222ec21ff5c352e9a683f43e90e038f",
      "parents": [
        "7fd1c7eabc6c12a2ff67ef58860aae761c92136e",
        "55f6534f260ec82ef2d69a0667b1883f13d11399"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jan 14 08:37:47 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 14 08:37:49 2015 +0000"
      },
      "message": "Merge \"JDWP: fix deadlock with GC\""
    },
    {
      "commit": "55f6534f260ec82ef2d69a0667b1883f13d11399",
      "tree": "6e00c7f32242baf3a1482db3656816a0b2f134a4",
      "parents": [
        "8fccea249b1a6f1469eeea42c2b2cca06ce1c70d"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jan 13 22:48:34 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jan 13 23:11:06 2015 +0100"
      },
      "message": "JDWP: fix deadlock with GC\n\nThis CL fixes a deadlock where JDWP thread and running GC thread are\nwaiting for each other. Here is the sequence of the deadlock:\n1. GC thread disables access to weak global references, then releases\n   mutator lock.\n2. JDWP thread takes mutator lock exclusively after suspending all\n   threads.\n3. GC thread waits for shared mutator lock which is held by JDWP\n   thread.\n4. JDWP thread clears weak global references but need to wait for GC\n   thread to re-enable access to them.\n\nTo avoid that situation, we ensure the JDWP thread does not attempt\nto delete weak global references while holding the mutator\nexclusively so GC thread is not blocked.\n\nBug: 18995321\nChange-Id: Ia7e82f463c27ffdcfd730c3117337a6a33d111e7\n"
    },
    {
      "commit": "e6c143fae8ec487704b3d0d28914cda3d6d19e88",
      "tree": "270a0f83996e2abc15ab9d6b643f112afc89587e",
      "parents": [
        "8fccea249b1a6f1469eeea42c2b2cca06ce1c70d"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jan 13 10:10:40 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jan 13 20:59:53 2015 +0100"
      },
      "message": "Fix bootclasspath string initialization\n\nWhen running the runtime with an image without explicitly specifying\nthe bootclasspath (with the -Xbootclasspath option), we construct it\nfrom the location of DEX files loaded from the image.\n\nThis allows to fix the JDWP test ClassPathsTest#testClassPaths001 on\nthe host where the bootclasspath is not explicitly specified on the\ncommand line.\n\nBug: 18812378\nChange-Id: I726eafd8b9e59dc9513beeb7082cf086fe89c4b1\n"
    },
    {
      "commit": "ad466adf38db74a9840659626858196091151a64",
      "tree": "feb296965a8a9659787a949e8e9aca0a7180774c",
      "parents": [
        "46af48acf4221a7f819d58dfffb576d0523ae285"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 08 16:28:08 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 09 15:04:27 2015 -0800"
      },
      "message": "Change hprof to use streaming\n\nPreviously, we compute the whole hprof dump in memory resulting in\n\u003e 50MB of memory usage for some apps (such as maps). This could\ncause the app to get killed by the low memory killer.\n\nThe solution works by doing the dump in 2 passes.\nThe first pass calculates the size of the dump.\nThe second pass starts by sending the DDMS header with the correct\nsize, then does the rest of the hprof dump by streaming and sending\ndata one HprofRecord at a time.\n\nBug: 18921793\nChange-Id: I7dd9f5cfe49799ba268095c994a8c2eb1fe493df\n"
    },
    {
      "commit": "107e757bfd32cc27750955e6f392986414bebe75",
      "tree": "e75824f21bbd9c75b865608ccfe1c09c70ea50a7",
      "parents": [
        "fcd3f33dde47ce13305a7dfb5a665bf832535ae4"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 18 11:13:15 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 18 11:29:28 2014 +0100"
      },
      "message": "JDWP: do not report start/end events for thread without peer\n\nTo report start/end thread events, we need the JDWP id of the thread.\nTo create a JDWP id, we need its java.lang.Thread peer. In the case\nthere is no Java peer, we can\u0027t report the event.\n\nFollow-up https://android-review.googlesource.com/118548 where the\nruntime attaches the current thread without Java peer when shutting\ndown.\n\nChange-Id: Icc2d50f3d2eedd1e0e3c5a21affd2261aaf7a862\n"
    },
    {
      "commit": "7d95565c84d91ae5dcec4b89728ada208633de0c",
      "tree": "3d45e97f3ca520a07c5005974b092e10fee0a433",
      "parents": [
        "f610c0597e001cb1043aa4074afe25ae79a800e3"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Oct 22 10:57:10 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Dec 17 09:38:28 2014 +0100"
      },
      "message": "Cleanup JDWP event matching\n\n* Use std::vector for the event match list.\n* Make event reporting methods void since result is never used.\n* Use nullptr keyword instead of NULL.\n\nChange-Id: Icd6f47e46cefc2cc63325df00037cd4b6a475259\n"
    },
    {
      "commit": "6d7839e03348111a4237f0d47d0e70bc81b32e7a",
      "tree": "b499eff6e4bb4b57367a5acfbfd2deff58694e41",
      "parents": [
        "c4925d4c02dc8f8d51cb2653b5e7a99f6c9fd7d7"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Dec 05 10:52:15 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Dec 09 11:40:13 2014 +0100"
      },
      "message": "JDWP: avoid crash on unsupported modifier\n\nReturns NOT_IMPLEMENTED error if we receive an event request with an\nunsupported modifier.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d81037\nBug: 18617787\n(cherry picked from commit 0fb33e7b7b0b86fb9c7b556e4a052874ec269bb0)\nChange-Id: I97729e2f98af3a75d24604926a89860255d4acae\n"
    },
    {
      "commit": "f3928794a10516e2ac0ffe2686a10891788d4b9c",
      "tree": "31648cbd1b6aa6bd7552c4d2664214626b702004",
      "parents": [
        "bf75c5cf32a47eecadcc5e4a324237c1f1d09cde"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Nov 17 19:00:37 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Nov 19 14:35:28 2014 +0100"
      },
      "message": "JDWP: only deoptimize when it is required\n\nWe don\u0027t need to deoptimize anything when we forced the use of the\ninterpreter (-Xint). In this case, no compiled code is executed\n(except native methods which are not concerned by deoptimization).\nTherefore we even don\u0027t need to enable/disable deoptimization support\nin instrumentation.\n\nWe also don\u0027t need to deoptimize a method that hasn\u0027t been compiled.\nSince it will run with interpreter, there is no point deoptimizing\nit. However this method may be inlined in a compiled caller method\nso we still need to deoptimize everything in this case.\n\nThis CL updates breakpoint support by storing the required kind of\ndeoptimization for a particular method. There are 3 cases:\n- kNothing: the method does not require deoptimization.\n- kSelectiveDeoptimization: the method needs to be deoptimized.\n- kFullDeoptimization: we must deoptimize everythinig.\nWhen uninstalling a breakpoint, we need to do the reverse operation.\n\nAlso fixes the SanityCheckExistingBreakpoints function to control\nbreakpoints related to the given method only and adds extra verbose\nlogs when choosing the appropriate deoptimization kind.\n\nBug: 18407046\nChange-Id: I5212c1fd2f72e06c79e7871db15696824d37dc0b\n"
    },
    {
      "commit": "ec17f98e7a4efecc93a7d75fd17d5b45cf1576fa",
      "tree": "52c7b3994b787e90c9debc0dc2ea1c5b82189a6b",
      "parents": [
        "346bcbde27e4620ed1e7bce91728f22069a371f0"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 13 10:29:25 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 13 10:29:25 2014 -0800"
      },
      "message": "kill HAVE_GETHOSTBYNAME_R\n\nBug: 18363225\nChange-Id: I71a62235db14412d2471f20ea663beb7df7326cd\n"
    },
    {
      "commit": "277ccbd200ea43590dfc06a93ae184a765327ad0",
      "tree": "d89712e93da5fb2748989353c9ee071102cf3f33",
      "parents": [
        "ad17d41841ba1fb177fb0bf175ec0e9f5e1412b3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 21:36:10 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 04 18:40:08 2014 -0800"
      },
      "message": "ART: More warnings\n\nEnable -Wno-conversion-null, -Wredundant-decls and -Wshadow in general,\nand -Wunused-but-set-parameter for GCC builds.\n\nChange-Id: I81bbdd762213444673c65d85edae594a523836e5\n"
    },
    {
      "commit": "6a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866f",
      "tree": "9df58b57af13240a93a6da4eefcf03f70cce9ad9",
      "parents": [
        "c6e0955737e15f7c0c3575d4e13789b3411f4993"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 31 00:33:20 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 03 20:01:04 2014 -0800"
      },
      "message": "Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.\n\nFix associated errors about unused paramenters and implict sign conversions.\nFor sign conversion this was largely in the area of enums, so add ostream\noperators for the effected enums and fix tools/generate-operator-out.py.\nTidy arena allocation code and arena allocated data types, rather than fixing\nnew and delete operators.\nRemove dead code.\n\nChange-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b\n"
    },
    {
      "commit": "54efee55ccfc9eb411b9fde6742fe457016a391d",
      "tree": "99c3f705036359a9985db51bf53785b2d87df8af",
      "parents": [
        "64727aeef8f4243f2058a19a43a937248a60dae1",
        "e2d628b5b0a1b9c29c173f3cbad3ef6cb6c24d2d"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Oct 24 14:22:05 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 24 14:22:06 2014 +0000"
      },
      "message": "Merge \"Make ObjectRegistry::InternalAdd GC safe\""
    },
    {
      "commit": "e2d628b5b0a1b9c29c173f3cbad3ef6cb6c24d2d",
      "tree": "b1fa6ef18e26a5bad38dde6735b673a54194a6e8",
      "parents": [
        "8fc5acfd382bdc0d7920e8a13439b64344a8988a"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Oct 23 15:39:33 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Oct 23 16:31:58 2014 +0200"
      },
      "message": "Make ObjectRegistry::InternalAdd GC safe\n\nBecause a call to IdentityHashCode may cause GC, the object pointer\nmay become invalid (if the object has been moved) on next uses. We\nnow access the object through a Handle to be GC safe.\n\nAlso remove unused methods.\n\nBug: 18098424\nChange-Id: I38fb55c3a6be62c4d98d4c94272a9cfeba327598\n"
    },
    {
      "commit": "6f3dbbadf4ce66982eb3d400e0a74cb73eb034f3",
      "tree": "f7a20779e4d665f948c5fbcd26dac0071dafb8d4",
      "parents": [
        "2df6840f68dd18d7dd8dbf53f8b6181bbfdc4fc4"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 14 17:41:57 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 16 19:27:28 2014 -0700"
      },
      "message": "Make ART compile with GCC -O0 again.\n\nTidy up InstructionSetFeatures so that it has a type hierarchy dependent on\narchitecture.\nAdd to instruction_set_test to warn when InstructionSetFeatures don\u0027t agree\nwith ones from system properties, AT_HWCAP and /proc/cpuinfo.\nClean-up class linker entry point logic to not return entry points but to\ntest whether the passed code is the particular entrypoint. This works around\nimage trampolines that replicate entrypoints.\nBug: 17993736\n\nChange-Id: I5f4b49e88c3b02a79f9bee04f83395146ed7be23\n"
    },
    {
      "commit": "033aabf9789eda162e183ed34678d665dc903387",
      "tree": "3beaf12012d725296f48877bb9676ea81fe000e5",
      "parents": [
        "2d4e89e97812aeca16ff058d7286f29b7549c43a"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Oct 08 13:54:55 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Oct 09 18:32:50 2014 +0200"
      },
      "message": "Only watch location for BREAKPOINT event\n\nThis CL ensures we watch a location for BREAKPOINT event only. Other\nevents (single-step, method entry/exit, ...) are handled differently\nand LocationOnly modifier is used as an event filter in this case.\n\nThis prevents from failing a check when we need to deoptimize for\nnon-breakpoint event.\n\nBug: 17908144\nChange-Id: Ib413d62fa31480fec8d750543c0605ba52188350\n"
    },
    {
      "commit": "c4481dbf1052f4ed9cb88aacbe0533e110fe6c1e",
      "tree": "0d5828445b95226d62b16f94abb5d8200bc282b2",
      "parents": [
        "400376f01747427313d4acf31b5ac508a8e368f7",
        "8009f39c6d63181a6cd0e348ce732997dbdf3d20"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 22 10:30:36 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 22 10:30:36 2014 +0000"
      },
      "message": "Merge \"Optimize JDWP stack local values access\""
    },
    {
      "commit": "8009f39c6d63181a6cd0e348ce732997dbdf3d20",
      "tree": "ff02473e6b0951364234a6038ae19a0875b7bdd7",
      "parents": [
        "5cdd0734d2f79eedc530f5f1e876cd2110e29c86"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 01 17:07:11 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 22 11:29:36 2014 +0200"
      },
      "message": "Optimize JDWP stack local values access\n\nThe StackFrame.GetValues and StackFrame.SetValues JDWP commands can refer to\nmultiple variables at the same time in a given frame. However we used to walk\nthe stack until getting to the requested frame for each variable.\n\nNow, we walk the stack only once until getting to the frame so the context is\ninitialized. Then we read/write value for each variable from this context.\n\nBug: 17343501\nBug: 15680615\n\nChange-Id: I2a4128f29a3c5856b994e280037c0a09eb48c5c8\n"
    },
    {
      "commit": "a9aa0ffc2cf917be05749d1b27e7994249edb6d2",
      "tree": "68ce850e78061951359e9a292ef0215e408d507c",
      "parents": [
        "5cdd0734d2f79eedc530f5f1e876cd2110e29c86"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Sep 19 12:07:51 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 22 10:06:19 2014 +0200"
      },
      "message": "Fix JDWP crash when reporting exception\n\nThe exception\u0027s throw location may be null so we need to handle that\ncase. Also fixes a memset issue.\n\nBug: 17571297\n(cherry picked from commit bbb63897d7f2d99219cb50721fe530521e08ddff)\n\nChange-Id: Iedebb58f9460c5f04913c269200e51161bda1ba9\n"
    },
    {
      "commit": "5cdd0734d2f79eedc530f5f1e876cd2110e29c86",
      "tree": "d4fdaf86505f7474dc7127cb968a44fe4e8ba58e",
      "parents": [
        "c64746c1d224143d85232c8899126930e3fe5d27",
        "f272af4b9dcd39cdd50fa6655601a26e837eaea9"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Sep 19 06:29:26 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 19 06:29:28 2014 +0000"
      },
      "message": "Merge \"Move spammy logs to JDWP verbose mode\""
    },
    {
      "commit": "6995c60cd6657c10811055c42661a55b10b47cef",
      "tree": "6fc528bca6f0c6fb989f88cb6af6c4829e1da172",
      "parents": [
        "d41491adb23764f28a80cbb7f2bd7af6491cd892"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 09 12:10:13 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 18 14:31:54 2014 +0200"
      },
      "message": "Update JDWP event filtering to avoid useless ids\n\nTo reduce the number of JDWP ids in the debugger, we update the event filtering\nsupport to work with runtime objects (Thread, Class, Object, ...) instead of\nJDWP ids (ThreadId, RefTypeId, ObjectId, ...).\n\nWe used to create useless JDWP ids for events even if they were not reported\nbecause of event filtering (thread only, class only, instance only, ...). Now\nwe only create JDWP ids when we know we\u0027re going to report an event.\n\nBug: 17343664\n(cherry picked from commit d539167b7f11136fe570a77aff2ee4935842007a)\n\nChange-Id: I8619e219733fc2fa3569f473b7bd8d9af4181f2b\n"
    },
    {
      "commit": "f272af4b9dcd39cdd50fa6655601a26e837eaea9",
      "tree": "31e57bb86fadf00aeb05de3f4211320d7a281bf4",
      "parents": [
        "d41491adb23764f28a80cbb7f2bd7af6491cd892"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 18 10:20:42 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 18 11:49:59 2014 +0200"
      },
      "message": "Move spammy logs to JDWP verbose mode\n\nWe are spammed by warning messages when debugging, especially each time we\nsuspend/resume all threads (to update instrumentation or collect monitor info).\nIt\u0027s common to get into the cases where these warnings are logged so they\nshouldn\u0027t be warning but debug messages.\n\nThis CL moves these LOG(WARNING) to VLOG(jdwp) to not disturb developers when\ndebugging their app (especially when looking for specific messages in logcat).\nWe keep them in JDWP verbose mode because they help knowing when we initiate\nthese sequences of \"suspend/resume all threads\".\n\nAlso adds debug suspend count in the log message for more context.\n\nBug: 17524544\nBug: 17170697\nChange-Id: Ic87985ac6913151d15fd89849e41bde61092c3dd\n"
    },
    {
      "commit": "b0b0b496125c16620e99ea4e4a05693c281eccf1",
      "tree": "a73507873a28411f843b98701bcd0535d1dc361a",
      "parents": [
        "97ca64b01e14de77ba14067b26069405d0dba0bf"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 15 11:27:27 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Sep 17 11:52:24 2014 +0200"
      },
      "message": "Avoid crash in StringReference.Value JDWP command\n\nChecks for null or invalid object id. Also checks whether the corresponding\nobject is a java.lang.String.\n\nBug: 17492221\nBug: 15005460\n\n(cherry picked from commit 29259fa6b0514866d2d4bf57d58c1557b26abbb7)\n\nChange-Id: I52673bdef6912a4cccf5a6eeecb6e1e817b9dd6b\n"
    },
    {
      "commit": "a06430c76981d545b5f2b64a7ef53c44c030cf73",
      "tree": "731fcb8361f9a3c1a4d08362ba50cf6e8a3736db",
      "parents": [
        "0785b90a38f5f2f0d5a9e3890fd16dc63a3bca10"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 15 19:21:30 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 16 17:12:36 2014 +0200"
      },
      "message": "Check for errors in ThreadGroupReference JDWP commands\n\nReturns INVALID_OBJECT error for null or invalid object. Also returns\nINVALID_THREAD_GROUP error when the object is not a java.lang.ThreadGroup.\n\nRemoves unused Dbg::GetMainThreadGroupId method.\n\nBug: 17503230\nChange-Id: Ifae39b0280633836655b22fc212018cb06b65c6c\n"
    },
    {
      "commit": "070f732bc270f6b9a579838d3418eb13b9cdf8ff",
      "tree": "2f9fc4e13662e5eab9352684dc8fbb7a5909aca4",
      "parents": [
        "bb2e4d7d2d863e2d10876a469642784c9aeafda6"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 09 12:08:49 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 11 11:59:12 2014 +0200"
      },
      "message": "Fix deadlock in VirtualMachine.AllThreads\n\nWe cannot add any object in the JDWP object registry while holding the\nLocks::thread_list_lock. Indeed we may need to suspend a thread and take it,\ncausing a deadlock by waiting for ourself on this lock.\n\nBug: 17343664\n\n(cherry picked from commit d35776413901a6a9d478e06dc354ea4f7d962e04)\n\nChange-Id: I07d150b95a6d2b62c913bf2ca2ac217911b2f19d\n"
    },
    {
      "commit": "4537c41b9a58c2280b3ad8bcf0130ed11c7a54f6",
      "tree": "94017c28f80cd0cbbe2d9aa61f9eabc02e6047fc",
      "parents": [
        "c7f6b86c269727fe031146b9c18652d40916d46f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Aug 28 14:41:50 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 11 11:37:43 2014 +0200"
      },
      "message": "Don\u0027t hold any lock when visiting classes from JDWP\n\nComputes reference type ids of all loaded classes without holding the class\nlinker lock. Because computing the JDWP reference type id can cause thread\nsuspension, we can\u0027t hold any lock. This is detected in debug build (using\nlibartd.so) and causes an abort.\n\nAlso adds missing thread safety annotations related to ObjectRegistry::lock_.\n\nBug: 17305632\nBug: 16720689\n\n(cherry picked from commit 95795e286145a4aece5c4a095fa2e7e88ee2115a)\n\nChange-Id: If4fb069790a0a3358ad49da8f75c62a54c0f0b56\n"
    },
    {
      "commit": "c0542af3e2170143ba40d89136e284997e16bf64",
      "tree": "a61e3b9cd297a4c52a0c0488a502cb77c47f0690",
      "parents": [
        "d3c9358544bbab15093614c5c2b6a9de86e11f7b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 03 16:16:56 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 03 17:15:54 2014 -0700"
      },
      "message": "Remove abuse of mirror::Object* to reference special values.\n\nRemove kInvalidIndirectRefObject, kClearedJniWeakGlobal and\nObjectRegistry::kInvalidObject. Handle error conditions by passing in or\nreturning an error value.\nGetObjectRefType is simplified to be faster and not return invalid references\nthat are not expected according to the spec. Adjust check JNI and\njni_internal_test appropriately.\nFix cases in the debugger/JDWP of out arguments being passed by reference.\nBug: 17376993\n\nChange-Id: I3ce8a28c01827e163f4dc288449959464da788b1\n"
    },
    {
      "commit": "68b56858367e29461ae290fd797443a1ef6d8005",
      "tree": "c086a68bcbbb50d7c3b829bcc7d4231ff815db4a",
      "parents": [
        "7c7686e62d262f1823876cebb3700e20f967dd56"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 29 20:19:11 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 02 08:01:04 2014 -0700"
      },
      "message": "Reduce and speed-up class def searches.\n\nUse the class linker for descriptor lookups from the compile driver so that\ndex caches are populated.\nReduce the scope of functions for scanning class paths to just the class\nlinker where they are performed.\nIf we see more than a threshold number of find class def misses on a dex file\nlazily compute an index, so that future lookups are constant time (part of the\ncollection code is taken from\nhttps://android-review.googlesource.com/#/c/103865/3). Note that we take a lazy\napproach so that we don\u0027t serialize on loading dex files, this avoids the\nreason the index was removed in 8b2c0b9abc3f520495f4387ea040132ba85cae69.\nRemove an implicit and unnecessary std::string creation for PrintableString.\n\nSingle threaded interpret-only dex2oat performance is improved by roughly 10%.\n\nBug: 16853450\n\nChange-Id: Icf72df76b0a4328f2a24075e81f4ff267b9401f4\n"
    },
    {
      "commit": "60ed7da4d193e0f90b05c4236af77d3b276c0ea4",
      "tree": "c910fe44c447c67fba9c2725f2f01c7a5a34ca5a",
      "parents": [
        "9c18858899738f79e75b5a31a96b91c8bfa8bdd7"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Aug 28 18:50:36 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Aug 28 18:51:18 2014 +0200"
      },
      "message": "Avoid null pointer dereference when sending JDWP packets\n\nBug: 16218394\n\nChange-Id: Id0ab09401b01f3041ea36013330a000d7702d8fa\n"
    },
    {
      "commit": "c6345efb56f9096c4b1a1a90e1d8d847fc01d910",
      "tree": "e0be48d4d581d9a72b5cb9b45b0fed6f8b778d07",
      "parents": [
        "562f0ef60bb1498fdf3c43fe747ba067ffe6ebed"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Aug 18 19:26:39 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Aug 19 11:38:49 2014 +0200"
      },
      "message": "Fix JDWP event races\n\nFix a race where the JDWP connection could be closed before the VM_DEATH event\nis sent during runtime shutdown.\n\nFix potential race where we could wait forever for the JDWP thread to establish\nconnection.\n\nBug: 16720689\n\n(cherry picked from commit d8b3537b89fa68599534a65afc3b272639cd4a75)\n\nChange-Id: I4b8996ade6a38fa8f7f23c3000b7184b162907d7\n"
    },
    {
      "commit": "37f3c968ecd04e77802fe17bb82dabc07de21ca1",
      "tree": "90699a532f8c6f964a342c0f68b2afa605d7a335",
      "parents": [
        "1817981832a531580c83f7d71f745da4e06889c3"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 11:25:30 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 11:25:30 2014 -0700"
      },
      "message": "Avoid direct use of QuasiAtomic by using Atomic.\n\nChange-Id: I92d0f822cddb2085de7cbb4c44c3a429081892a2\n"
    },
    {
      "commit": "e63db27db913f1a88e2095a1ee8239b2bb9124e8",
      "tree": "893dee6783bca6717259321a6e4ba029c9c123e2",
      "parents": [
        "07b8441303ea82fca3cb85d71ecf8752d73cedd7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 15:36:11 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 17:07:49 2014 -0700"
      },
      "message": "Break apart header files.\n\nCreate libart-gtest for common runtime and compiler gtest routines.\nRename CompilerCallbacksImpl that is quick compiler specific.\nRename trace clock source constants to not use the overloaded profiler term.\n\nChange-Id: I4aac4bdc7e7850c68335f81e59a390133b54e933\n"
    },
    {
      "commit": "0ec17d2ddb69d3f5c46ccad62e82c0ffd6219428",
      "tree": "a90ae1adaf549f474cc9d269f6ef5fe0062128d6",
      "parents": [
        "e8a30f37bf1530a80a7df17692dbe7a68764ac30"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jul 07 13:07:08 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Jul 08 11:23:34 2014 -0700"
      },
      "message": "Remove Dbg::VisitRoots().\n\nWe replace the GC strong roots with JNI.\n\njdwp_test passes.\n\nBug: 12687968\nChange-Id: I841f1aaa5dffa784ca25953a251600f70df273b2\n"
    },
    {
      "commit": "a032870e19e4a6c8d62b7dab806261006fa711ee",
      "tree": "46092c2a7b5614e0f7d750f1f4b3257440e705de",
      "parents": [
        "ebeaf8f7c88af0917f4b7b1137dd78d56d66dd59"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 25 22:06:12 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 25 22:19:11 2014 +0200"
      },
      "message": "Fix memory leak in JDWP object registry\n\nDeletes ObjectRegistryEntry objects before clearing the maps.\n\nChange-Id: Iaa30941fb8768b7294366a8f9855580cb29dadf5\n"
    },
    {
      "commit": "bca0d3d0279e9a75b4aec827b40cdb267e1e990e",
      "tree": "dead49785589e4490954bbb8143bbc0e4478f74c",
      "parents": [
        "ad6a328506e30b7feb8ddfd2867dec7633a3e52b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 11 16:01:17 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jun 23 09:59:43 2014 +0200"
      },
      "message": "More verbose logs for JDWP events\n\nLogs more information about the JDWP event being reported with VLOG(jdwp). This\nhelps mainly when debugging JDWP with -verbose:jdwp option.\n\nChange-Id: I49495bdab03dbcbdc0b6c00a8df718bfedbad91d\n"
    },
    {
      "commit": "b5a9e3d1cc1fd66683e43e365afc8c900e2800c4",
      "tree": "5b259807b4c5c67c532050939458a8390234a7a0",
      "parents": [
        "3b95d23f44485d207aa6ef298dc744fa2355578b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jun 09 12:11:20 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Jun 11 14:46:13 2014 -0700"
      },
      "message": "Remove Object* weak roots from the debugger.\n\nThe weak roots were converted to JNI weak refs.\n\nSince the weak roots are now normal JNI weak refs, we eliminate the\nneed to insert read barriers for those weak roots in the debugger and\nthe need for the GC to have a separate step to update them as part of\nthe system weak sweeping.\n\nBug: 12687968\nChange-Id: If16396d4713457b8af4f1ea6a0c6ec6799cb615e\n"
    },
    {
      "commit": "700a402244a1a423da4f3ba8032459f4b65fa18f",
      "tree": "4c22fcda04d271bd55a37aff30650214af17a90c",
      "parents": [
        "047c11adcbcbc0bcf210defdfcbada763961ffee"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 16:49:03 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 22:27:39 2014 -0700"
      },
      "message": "Now we have a proper C++ library, use std::unique_ptr.\n\nAlso remove the Android.libcxx.mk and other bits of stlport compatibility\nmechanics.\n\nChange-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61\n"
    },
    {
      "commit": "507dfdd147c97bfbadebfd63584d094b6a4e7b47",
      "tree": "cce43931b6dcd088cb2932c2491f86116353a27f",
      "parents": [
        "922ddb30982d2597eab634d8b8598bec0eb7d3b7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 15 16:42:40 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 15 16:50:51 2014 -0700"
      },
      "message": "Compatibility layer to transition from UniquePtr to std::unique_ptr.\n\nUse ART_WITH_STLPORT (enabled for the target) to cause the use of UniquePtr,\nfor the host switch to std::unique_ptr. For now the type remains called\nUniquePtr.\nMake dalvik compile with clang on the host, move its build to C++11.\n\nChange-Id: I5ba8d2757904bc089ed62047ea03de3c0853fb12\n"
    },
    {
      "commit": "42cd43fa593e8f0427eb0ec158bef08814a6180b",
      "tree": "ad4231ee8a812e7702ddefdf6c9b9061a178d674",
      "parents": [
        "e1910f1d802dff79bba5ef61e1c4fd0b95f6e5b0"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue May 13 14:15:41 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 15 09:25:48 2014 +0200"
      },
      "message": "Register debugger for interesting instrumentation events only\n\nThis avoids the overhead of notifying events (like method entry/exit, field\nread/write, ...) from the interpreter when they are not requested on the JDWP\nside. It also avoids burning JDWP ids for objects and classes before we find\nout we do not need to report the event.\n\nWhen we register a JDWP event (like a breakpoint), we add the debugger as\na listener for the corresponding instrumentation event (like kDexPcChanged).\nOn the other hand, when a JDWP event is cleared, we remove the debugger as a\nlistener for the corresponding instrumentation event. To control we add/remove\nthe debugger as listener only once per instrumentation event, we use reference\ncounting.\n\nLike deoptimization, we can update instrumentation listeners only when when all\nmutator threads are suspended. To add or remove the debugger as listener, we\nextend the support of deoptimization requests to a more general support dealing\nwith instrumentation requests.\nWe add kRegisterForEvent and kUnregisterForEvent request kinds, respectively to\nadd or remove the debugger as a listener for a given instrumentation event.\nNote: we will rename the related classes, methods, ... to avoid pollution in\nthe code review.\n\nThis CL also fixes Instrumentation::IsActive to take field read/write events\ninto account.\n\nBug: 14401699\nBug: 14826953\nChange-Id: Ic896469e82a8589de419ebea4b9dc3116925f3ab\n"
    },
    {
      "commit": "4d466a8e4587422c989705dce3b2a19e7f0137f5",
      "tree": "bd8f0f45db9a7d5888b14a070690f59fb599bd68",
      "parents": [
        "f1c036fc8fa97617cc42bda44a0adbc7b856d6cd"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu May 08 19:05:29 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri May 09 12:23:00 2014 -0700"
      },
      "message": "Remove all LOG(DEBUG) which is not intended to be checked in\n\nBug: 14632493\nChange-Id: Id9da8b87798af0a1b2bd2c178133e5f1ba47d43d\n"
    },
    {
      "commit": "479fc1ecc12fa6560ca90d841c4d5174fb346618",
      "tree": "9c89abea89494c90934b260f42f81e8ca83c3611",
      "parents": [
        "96a4f29350bf279d48bff70e21e3264cce216683"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 04 17:51:34 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 25 09:35:54 2014 +0200"
      },
      "message": "Support field watchpoint in interpreter\n\nWe report field read/write events to instrumentation from the interpreter. This\nallows it to send JDWP field access and field modification events to debugger.\nThis completes CL https://android-review.googlesource.com/90390.\n\nWe also fix the JDWP FieldOnly modifier by introducing ModBasket.fieldTypeID.\nWe incorrectly used ModBasket.classId which is actually dedicated to ClassOnly\nmodifier based on thread\u0027s location\u0027s class id.\n\nFinally, we now enable canWatchFieldModification and canWatchFieldAccess JDWP\ncapabilities so a debugger can request these events to be reported.\n\nBug: 8267708\nChange-Id: I987852ad47abb27b2f7e78544a8189c7a4e2f462\n"
    },
    {
      "commit": "ea8106321c7c05f8b135d7b4cdb34f5d1e6ed0e3",
      "tree": "db61c57b6c15aa8927758025b7ebd4ce278f8ace",
      "parents": [
        "6123d94cddf34f3fdb8ece55476e414e34662394",
        "7ec2f1ca3cbd021848da75d5566f7239ce29676f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 22 07:05:52 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 22 07:05:54 2014 +0000"
      },
      "message": "Merge \"Speed up single-stepping\""
    },
    {
      "commit": "cf7bea35a401af5914efeafd8d488866f36faf1a",
      "tree": "661d028df4d3dfecdf671391a3693181fc6c1503",
      "parents": [
        "51f32a651666b06f3cdac4a80a65db1d7bc90aac"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 16 12:03:00 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 16 12:03:00 2014 +0200"
      },
      "message": "Disable JDWP field watchpoint capabilities\n\nWe do not fully support field watchpoint yet. We can only enable these\ncapabilities when we do report these events.\n\nBug: 8267708\nChange-Id: I07ccf7ddffdd26e143b7fb0f13ebe030d75e8491\n"
    },
    {
      "commit": "51f32a651666b06f3cdac4a80a65db1d7bc90aac",
      "tree": "5eac564fedd23a556cee80024db9c2484e3aa3e7",
      "parents": [
        "172109b72383f109f0ee240955e15643ba755f63",
        "5f4e6f56fcc4289eed73e7ad00d874148aeb68d1"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 16 08:08:11 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 16 08:08:11 2014 +0000"
      },
      "message": "Merge \"Allow use of instance filter for JDWP events\""
    },
    {
      "commit": "172109b72383f109f0ee240955e15643ba755f63",
      "tree": "2fd5220bc0c1b8a3396de47619df2dbcfd1fcc2d",
      "parents": [
        "9623c6668962559e818d1e7f05a58dcb96c71fa9",
        "43207797d05e54fb945e2fc22145722cb26cb27b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 16 07:29:10 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 16 07:29:11 2014 +0000"
      },
      "message": "Merge \"Fix JDWP count event modifier\""
    },
    {
      "commit": "5f4e6f56fcc4289eed73e7ad00d874148aeb68d1",
      "tree": "00573868ff19e0a9ef232265e54180dea2b30438",
      "parents": [
        "2be6fc74bce10ac68d3d1b39a5019f520ad170ea"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 11 12:07:41 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 15 16:19:11 2014 +0200"
      },
      "message": "Allow use of instance filter for JDWP events\n\nBug: 13922844\nChange-Id: Ic4e6d7af7c80928c25417db5f43049614d225c97\n"
    },
    {
      "commit": "43207797d05e54fb945e2fc22145722cb26cb27b",
      "tree": "485fe12312a751569c4a476c2efc517a05b4070e",
      "parents": [
        "9b417e4f0f87da6bfe8dc5f02c987acfcb6dca31"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 15 16:03:27 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 15 16:18:10 2014 +0200"
      },
      "message": "Fix JDWP count event modifier\n\nBug: 14053614\nChange-Id: I736f6d6802e58e7a4fb29d0558bdd2abd3b2a48e\n"
    },
    {
      "commit": "c311d0c85e17773042daaa7a4abc58b3e3c0a0c1",
      "tree": "12103a18b43dd863ab7f3fd51ce9600ef4754d95",
      "parents": [
        "0a01b38244053e72f33339e733b3ae5e15a5966b",
        "3f52eafe5577b8489f90dc8ed5981b3455206147"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 15 06:43:14 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 15 06:43:14 2014 +0000"
      },
      "message": "Merge \"Prepare field watchpoint support\""
    },
    {
      "commit": "3f52eafe5577b8489f90dc8ed5981b3455206147",
      "tree": "7155df948d345c8a5a2d801c23b396af76527ba0",
      "parents": [
        "9b417e4f0f87da6bfe8dc5f02c987acfcb6dca31"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 04 17:50:18 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 15 08:39:18 2014 +0200"
      },
      "message": "Prepare field watchpoint support\n\nAdds field read/write events in the instrumentation. The debugger now registers\nas a listener for these events so JDWP field access and field modification\nevents can be reported.\n\nThis CL will be followed by another one to report these events from the\ninterpreter. Therefore no JDWP field access and field modification events\ncan be sent for now.\n\nBug: 8267708\nChange-Id: If2a93eb590805567d69015c83cce9cd2ab712cbd\n"
    },
    {
      "commit": "bb5c355df9d93d103f1a008fba485d03c56465b5",
      "tree": "1b5af78d22efa0d8a512cc43cf274aabd89170e2",
      "parents": [
        "9b417e4f0f87da6bfe8dc5f02c987acfcb6dca31"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 14 14:38:24 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 14 15:11:21 2014 +0200"
      },
      "message": "Deduplicate code starting JDWP thread\n\nAlso waits for thread_start_cond_ in a loop and removes needless mutex lock in\nJdwpState::Run when checking thread state.\n\nChange-Id: I6fca2151b5343b2906e9fa3b439029e6ad5b086d\n"
    },
    {
      "commit": "7ec2f1ca3cbd021848da75d5566f7239ce29676f",
      "tree": "fd2f221e9598fc7fa5066b2a9c746b228ef53faf",
      "parents": [
        "2be6fc74bce10ac68d3d1b39a5019f520ad170ea"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 27 20:06:47 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 09 18:23:28 2014 +0200"
      },
      "message": "Speed up single-stepping\n\nDuring single-stepping sequence, we need to deoptimize everything when we\nregister a single-step event and undeoptimize everything when it is done. This\ncauses a slow pattern where we continuously deoptimize-undeoptimize everything\nfor each single-step.\n\nThis CL introduces a special handling of single-step undeoptimization. We now\ndelay the undeoptimization to the next resume (one thread or all threads) or\nthe end of the debugging session. Indeed, a single-step event registration is\nalways followed by a resume command.\nAt the \"resume\" point, we know if a single-step event is registered and if we\nreally need to undeoptimize. At the \"registration\" point, we know we did not\nundeoptimized everything so we don\u0027t need to deoptimize everything again.\nTherefore, in a sequence of single-steps, we only do a full deoptimization for\nthe first single-step and a full undeoptimization for the last single-step.\n\nWe update logs at deoptimization points so we can track more precisely. Note\nthey are verbose logs that still must be enabled with -verbose:jdwp option.\n\nWe also make some improvement inside instrumentation:\n* updates Instrumentation::ShouldNotifyMethodEnterExitEvents to comply with its\nname.\n* compute frame id only once when looking for the corresponding instrumentation\nframe.\n* compute the OatMethod once in ClassLinker::GetPortableOatCodeFor to avoid\nlooking for it again.\n\nBug: 13577964\nChange-Id: If6fa198a676b515cd474b8c4d7bf7ef3626f2dc7\n"
    },
    {
      "commit": "4d25df3f76f864b7629ac8c0046d46997f293d8d",
      "tree": "31840831d8c81d06ffd575fdb0adc8403cd8dbb1",
      "parents": [
        "909f133bc938928a2403baccc983701cb9ebb17f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Mar 21 17:44:46 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Mar 26 11:46:43 2014 +0100"
      },
      "message": "Refactor deoptimization support in debugger\n\nThis CL prepares breakpoint support for inlined methods where we\u0027ll have to\ndeoptimize everything.\n\nWe move deoptimization-related information to Dbg class only (deoptimization\nrequest queue, full deoptimization event count and deoptimization lock). We\nreplace MethodInstrumentionRequest by DeoptimizationRequest. This is used to\nknow which kind of deoptimization is required for a particular event.\n\nIt also simplifies lock ordering a bit during event setup: we no longer need to\nhold the deoptimization lock while holding the breakpoint lock. Moreover, the\ndeoptimization lock should be held only after the event list lock.\n\nBug: 12187616\nChange-Id: Iff13f004adaeb25e5d609238bacce0b9720510e6\n"
    },
    {
      "commit": "43c8d729556844d1a74449a8a300c795d6a5406a",
      "tree": "d163695ff0efc74429653587c116d179228fd26d",
      "parents": [
        "341a84af890a328a6c8f719beb3f670dd1a369b4"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Mar 18 12:19:52 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Mar 18 16:56:07 2014 +0100"
      },
      "message": "Do not send JDWP data in case of error.\n\nWhen sending JDWP reply packet with an error, we want to ignore any data in the\nbuffer. While we reflect that in the packet\u0027s length (first 4 bytes), we used\nto send all data in the buffer. This causes the receiver to read malformed JDWP\npacket.\n\nThis CL adds \"length\" argument to JdwpNetStateBase::WritePacket so we control\nthe amount of data we send. If the reply has no error, it is set to the length\nof the buffer. Otherwise it is the length of JDWP packet header indicating no\ndata is available.\n\nBug: 13366758\nChange-Id: Ib72c10d5faf065fb44901c34b2732496b6667efa\n"
    }
  ],
  "next": "cb19ebf7609f74b223bd86c94f721498795f9bba"
}
