)]}'
{
  "log": [
    {
      "commit": "d4a02cfc59a449d216faa687cfdaa4252b4a433f",
      "tree": "dc0f23e71354403028b30f1592637e2d66db6210",
      "parents": [
        "0022bdf71533a300deebe6b9cf287eaceeb0620c",
        "33d6903e570daf8f3cf7c1f6ebd9a6dd22c7c23c"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jun 23 13:53:54 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 23 13:53:55 2015 +0000"
      },
      "message": "Merge \"Replace some run-time assertions with compile-time ones in ART.\""
    },
    {
      "commit": "1ed11b9ad5512cf464cb1686640df53201fa5297",
      "tree": "7466c110f74fb736a8f00e60a24ac841d1c0213a",
      "parents": [
        "5aa39bb7f93cf2e8f73d06980b588519825c0ebe"
      ],
      "author": {
        "name": "Man Cao",
        "email": "manc@google.com",
        "time": "Thu Jun 11 22:47:35 2015 -0700"
      },
      "committer": {
        "name": "Man Cao",
        "email": "manc@google.com",
        "time": "Mon Jun 22 16:52:08 2015 -0700"
      },
      "message": "Restore DDMS recent allocation tracking\u0027s behavior\n\nMake the allocation tracker mark recently allocated objects as roots,\nso the allocation records are not swept. Because DDMS needs recent\nallocation tracking records even for dead objects. This should fix\nthe flaky failures for 098-ddmc test, but it cannot pass GC stress\ntest (OOM). Re-enabled 098-ddmc for other tests.\n\nThere should be an option to not mark them as roots, when user only\nneeds HPROF dump with traces but not DDMS\u0027s recent allocation tracking.\nProbably need to add a new JNI API function for this option.\n\nThere could be another way to keep a second list of recent allocation\nrecords and maintain a type cache for them, so not to make the objects\nroots. But it\u0027s more complex, and not sure which is better.\n\nAlso reduce memory usage for AllocRecordStackTrace objects, and change\ndefault stack depth to 16. Rename the property that controls the stack\ndepth to \"debug.allocTracker.maxStackDepth\" so developer can change it.\n\nBug:20037135\nChange-Id: Ic6b9ae87bdcda558be6f14ded8057e763439881c\n"
    },
    {
      "commit": "33d6903e570daf8f3cf7c1f6ebd9a6dd22c7c23c",
      "tree": "8069008292fe085d051300f1a871392dc413f820",
      "parents": [
        "822c00d0fe3b70d1f1fe5bac03713674d45f8173"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jun 18 18:20:59 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jun 18 18:20:59 2015 +0100"
      },
      "message": "Replace some run-time assertions with compile-time ones in ART.\n\nChange-Id: I16c3fad45c4b98b94b7c83d071374096e81d407a\n"
    },
    {
      "commit": "05c26b30843dd8283c703356e75d51726e8b8e3a",
      "tree": "84d6b27009e308f1a43c8847fd0aa342bc6d4b29",
      "parents": [
        "42361f2e8b3601813dc40d12e14c679df99a864b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jun 11 18:42:58 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jun 12 19:20:46 2015 +0200"
      },
      "message": "JDWP: update handling of 8-bit and 16-bit fields\n\nWe must use special getter/setter for types smaller than int:\nboolean, byte, char and short. However, JDWP still requires to treat:\n- int and float as 32-bit values\n- long and double as 64-bit values\n\nBug: 21746739\nChange-Id: I8d0ce46246084c9e16f287da28d8969d36b83b99\n"
    },
    {
      "commit": "42361f2e8b3601813dc40d12e14c679df99a864b",
      "tree": "f5a89acb10d76edc7b7d288e934b60f3c1fc6b9a",
      "parents": [
        "995f6e23418a1b4058167e64bbe50fd9e5dc7f02",
        "cbc5064ff05179b97b416f00ca579c55e38cd7d9"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jun 12 10:40:56 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 12 10:40:58 2015 +0000"
      },
      "message": "Merge \"JDWP: asynchronous invoke command handling\""
    },
    {
      "commit": "8c2ff641294715864013737fdec57cdfd410270c",
      "tree": "2dd302323b4711d1a9391b8c1a8dce3de3e76e91",
      "parents": [
        "6dbf5a5a075a371cb2ff3659058e93a985485baa"
      ],
      "author": {
        "name": "Man Cao",
        "email": "manc@google.com",
        "time": "Wed May 27 17:25:30 2015 -0700"
      },
      "committer": {
        "name": "Man Cao",
        "email": "manc@google.com",
        "time": "Wed Jun 10 15:03:01 2015 -0700"
      },
      "message": "Add allocation stack traces for HPROF dump.\n\nThis feature is currently only enabled when DDMS\u0027s allocation tracking\nis enabled. In the future there should be a way to enable this feature\nbefore an application starts.\n\nAlso updates DDMS\u0027s recent allocation tracking to use a new backend\ndata structure that is shared with this feature.\n\nThe following system properties controls customizable parameters:\ndalvik.vm.allocTrackerMax: max number of objects that have allocation\n                           records, default 512K;\n\ndalvik.vm.recentAllocMax:  max number of records that are sent to DDMS\n                           when clicking \"Get allocation\" button,\n                           default 64K-1 (limit of the protocol);\n\ndalvik.vm.allocStackDepth: max number of stack frames in an allocation\n                           record, default 4.\n\nBug: 20037135\nChange-Id: I26ed378a5613678bd3c43e846025f90470a8e059\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": "415fd0833fe44b99ed57353f4bd7572681506daa",
      "tree": "5c798549945457a86faf181495337722335ae4b0",
      "parents": [
        "a96bea54b7e3def5490d169f2bf92be2e68dd001"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jun 01 11:42:27 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jun 01 12:27:32 2015 +0200"
      },
      "message": "Fix JDWP tests after ArtMethod change\n\nFixes Throwable::GetStackDepth for exception event detection after\ninternal stack trace representation change.\n\nAdds missing ArtMethod::GetInterfaceMethodIfProxy call in case of\nproxy method.\n\nBug: 19264997\nChange-Id: I363e293796848c3ec491c963813f62d868da44d2\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": "31db3432157caac55584a59827c69b303ba09d13",
      "tree": "e3386ac519070582ef468021e6d94c0f1b96d359",
      "parents": [
        "2b2288f2abbcdcd1201b322008fa30495d724d51",
        "52f5f93873ec244320e05b033243c5c7a3ae40e2"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 28 09:56:32 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 28 09:56:32 2015 +0000"
      },
      "message": "Merge \"Fix single-step in native thread\""
    },
    {
      "commit": "52f5f93873ec244320e05b033243c5c7a3ae40e2",
      "tree": "bbd55d9daa0ef2584d958dee376561426f335463",
      "parents": [
        "03b5a398a96ea29c39ddfe3d810245b868d2871f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 28 11:00:57 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 28 11:35:01 2015 +0200"
      },
      "message": "Fix single-step in native thread\n\nIf we attempt to single-step in a thread that is not running Java\ncode, there is no current method on the stack. So we need to check\nfor null before trying to decode debug info.\n\nBug: 21320157\nChange-Id: Idef9954d14e1eb7185f25d2a6e238135ac52d35f\n"
    },
    {
      "commit": "dc31313c4577bb4c00d90774159c84e738ed348d",
      "tree": "5f850028ebc8843cdcaf56c5fc122bd660937603",
      "parents": [
        "03b5a398a96ea29c39ddfe3d810245b868d2871f",
        "80afd02024d20e60b197d3adfbb43cc303cf29e0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 17:42:31 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 26 17:42:31 2015 +0000"
      },
      "message": "Merge \"ART: Clean up arm64 kNumberOfXRegisters usage.\""
    },
    {
      "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": "de48aa6708a3d5dacf7db3d64965e23261fb15d3",
      "tree": "f26124e483ab84d2009c735897c3a4beaf37cb39",
      "parents": [
        "dc80984a9e24d6e46fab9461f01d7a27e656cf90"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue May 26 11:53:39 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue May 26 12:32:56 2015 +0200"
      },
      "message": "JDWP: fix breakpoint on catch statement\n\nSetting a breakpoint on a catch statement in the source actually\ninstalls the breakpoint on a DEX move-exception instruction. At this\npoint, an exception is pending in the current thread.\n\nThe issue is no exception must be pending in the current thread to\nreport the breakpoint event. This is required to be able to call JNI\nfunctions to create JDWP ids.\n\nThis CL fixes it by clearing the pending exception before reporting\nevent and restore it after reporting the event.\n\nBug: 21382373\nChange-Id: Id3c60cca398135a3e0859a1ccb645b9c99d5ca76\n"
    },
    {
      "commit": "39b6c24ce68cf05db0f82f454b4401cfb03d675f",
      "tree": "29e15d2597cd05419a1c0faedfe6977af9a7dfa3",
      "parents": [
        "768b19b6bbddaa2262f6532e7fcb96fecbfee981"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue May 19 20:30:23 2015 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed May 20 18:40:43 2015 -0700"
      },
      "message": "Intercept JNI invocation of String.\u003cinit\u003e methods.\n\nlibmono uses JNI AllocObject and CallNonvirtualVoidMethod to create and\ninitialize a string instead of using the recommended NewObject. This\nchange adds an intercept to change the String.\u003cinit\u003e call to a\nStringFactory call instead. Then, it uses the object id of the original\nstring object referrer and maps it to the result of the StringFactory.\n\nBug: 21288130\n\n(cherry picked from commit 15e9ad1d028d7f12cb598b075453173532a00d91)\n\nChange-Id: I3421c43722c07397da4a398c2ca9110e1d40bcfa\n"
    },
    {
      "commit": "aae4334a3f5215edbfe90ab00f8e1e9ade542007",
      "tree": "1cab65e87d4d797ca6736d046e1d8322d07b4d51",
      "parents": [
        "03e4351df62ade9fa0e9139ece28f23ba85c49c2",
        "261bc044a3575512869586593e99e97cd8b1c321"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon May 18 08:02:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon May 18 08:02:30 2015 +0000"
      },
      "message": "Merge \"JDWP: more GC safety\""
    },
    {
      "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": "b43390cb87eace4a017f672d66cfb20fb9e76aa1",
      "tree": "7d4f2f0f0d0ad561f20cac4a2aa78cba9a477c78",
      "parents": [
        "28d332c720cb7c9c0163c4844bb0c1a2a067470e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 12 10:47:11 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 12 14:59:31 2015 -0700"
      },
      "message": "Hold heap bitmap lock in Heap::GetObjectsAllocated\n\nFixes a race condition where add and remove space could cause a crash\nwhen we iterated over the spaces.\n\nTODO: Add a spaces lock or something to guard against this.\n\n(cherry picked from commit a395c0a492079d86b312c9edc796d63001576954)\n\nBug: 21031927\n\nChange-Id: I7f0d558316f8e9d9f22ffd182e8666355bf50d47\n"
    },
    {
      "commit": "8e5bd18fc665d7ec5461ea068e98740a65da754c",
      "tree": "83441cdfdab06709b573aad2ab731cc65c10b9f1",
      "parents": [
        "cdeb0b5fede4c06488f43a212591e661d946bc78"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 06 11:34:34 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 11 15:23:25 2015 +0100"
      },
      "message": "Add a flag to StackVisitor for inlining.\n\nThe flag tells whether the stack walk needs to include inlined\nJava frames.\n\nThis does not do anything just yet, as we\u0027re not inlining anyways.\n\nChange-Id: I716e25094fe56fa335ca1f9a398c1bcdba478e73\n"
    },
    {
      "commit": "ba9ef5377b21a627ec502da3e475b34e45d0c435",
      "tree": "5facbc141e51db481cb7473403675a4142992ba1",
      "parents": [
        "b882da74db950246b5731aecad9737b63bdefef7",
        "0462c4c87c39db6cfcd338f323844738109ac3c9"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 07 16:10:43 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 07 16:10:44 2015 +0000"
      },
      "message": "Merge \"Support multiple instrumentation clients\""
    },
    {
      "commit": "0462c4c87c39db6cfcd338f323844738109ac3c9",
      "tree": "30776cd2fadab4100851640976c2b572d228d688",
      "parents": [
        "a6591ef95afa6bc9d89c0c6044635ec7a13d4c55"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 01 16:34:17 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 07 18:03:58 2015 +0200"
      },
      "message": "Support multiple instrumentation clients\n\nChanges Instrumentation::ConfigureStubs to support multiple clients\nthat need different levels of instrumenation. A client is identified\nby a string key used to save the desired instrumentation level.\n\nAlso adds regression gtest instrumentation_test and some cleanup.\n\nBug: 19829329\nChange-Id: I1fc24a86fcb7cb46d4be806895376c25cc0a0b3c\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": "9d1e19035a59ff8bf05a09ad880ede99806ba73f",
      "tree": "7eb3c9eb01d4f581f3e354d947300547582fdd38",
      "parents": [
        "3fd79afbb7490f52817f737ecceb694f6618dcf9",
        "848f70a3d73833fc1bf3032a9ff6812e429661d9"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Apr 28 02:04:09 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 28 02:04:09 2015 +0000"
      },
      "message": "Merge \"Replace String CharArray with internal uint16_t array.\""
    },
    {
      "commit": "848f70a3d73833fc1bf3032a9ff6812e429661d9",
      "tree": "b0349b3a40aab5a915af491b100659a5ca9fbbf6",
      "parents": [
        "d14438f0c5071962be7fab572b54687d32d9d087"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jan 15 13:49:50 2014 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Apr 27 18:54:52 2015 -0700"
      },
      "message": "Replace String CharArray with internal uint16_t array.\n\nSummary of high level changes:\n  - Adds compiler inliner support to identify string init methods\n  - Adds compiler support (quick \u0026 optimizing) with new invoke code path\n    that calls method off the thread pointer\n  - Adds thread entrypoints for all string init methods\n  - Adds map to verifier to log when receiver of string init has been\n    copied to other registers. used by compiler and interpreter\n\nChange-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01\n"
    },
    {
      "commit": "8a35405e00ad3a722750e37c8eae1c3e1cc0afb0",
      "tree": "62487b86a0e6bcfc7d2ba948f289956c6d43d3c5",
      "parents": [
        "d74a1bf310a6a5ad2d770fcd76735cbc617d64eb"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 24 17:23:53 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 27 11:45:29 2015 -0700"
      },
      "message": "Fix mismatched malloc/free delete/new.\n\nModify the monitor code to override the delete operator. The problem\nis the new operator is overloaded to return a pointer returned by\nposix_memalign, but then it\u0027s freed with a delete, not a free call.\n\nAlso, fix the debugger code to use the [] for a std::unique_ptr to\nmatch how the value is actually allocated.\n\nBoth problems found by ASAN.\n\nBug: 18202869\n\nChange-Id: I2f3a2c02a7f35399b7ba6717b08a035089fab00d\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": "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": "9b87d4a2f96bf935640f67b66d7d4cce867ceece",
      "tree": "305b448ca47d180c8c63e580a574d7cb70af126f",
      "parents": [
        "caff30245889729f102af87e79705893401251ef",
        "2c3e77a0b91b2225fcdd3b34d8a734b85eec0579"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 07 15:16:13 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 07 15:16:13 2015 +0000"
      },
      "message": "Merge \"JDWP: clear exception when allocation fails\""
    },
    {
      "commit": "bb87e0f1a52de656bc77cb01cb887e51a0e5198b",
      "tree": "113f014c6e20fab3e936a3ac05f9f738639541f6",
      "parents": [
        "e57fc0f0260fcb1d08cbb720ec95c04c0f394b91"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 03 11:21:55 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 06 10:44:37 2015 -0700"
      },
      "message": "Refactor and improve GC root handling\n\nChanged GcRoot to use compressed references. Changed root visiting to\nuse virtual functions instead of function pointers. Changed root visting\ninterface to be an array of roots instead of a single root at a time.\nAdded buffered root marking helper to avoid dispatch overhead.\n\nRoot marking seems a bit faster on EvaluateAndApplyChanges due to batch\nmarking. Pause times unaffected.\n\nMips64 is untested but might work, maybe.\n\nBefore:\nMarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us\n\nAfter:\nMarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us\n\nBug: 19264997\n\nChange-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca\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": "4bf34ade61a5dd1537781764aa38acbde5be6fc9",
      "tree": "c6c75fa890750fcb9ab51cfc718784129025bac2",
      "parents": [
        "a3d40d5f764adfde8fa40d826cd93ba36cd15437",
        "abbabc8acca2231edc5d6e95d523e3fde9a0ba9f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Mar 30 07:44:45 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 30 07:44:46 2015 +0000"
      },
      "message": "Merge \"JDWP: more checking for StackFrame commands\""
    },
    {
      "commit": "daaf3265806eb2eadb2e03302bd68022fab5ca28",
      "tree": "aff5d6d53d6d2b65995aa204839f88ee66400989",
      "parents": [
        "68e22f3b982ff9ccbdfb3b65b7cfc16fcae907ba"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 24 13:30:28 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Mar 29 14:13:08 2015 -0700"
      },
      "message": "Add AccessibleObject and Field to mirror\n\nMain motivation is to remove all the functionality / field access on\njava side to ArtField. Also comes with some reflection speedups /\nslowdowns.\n\nSummary results:\ngetDeclaredField/getField are slower mostly due to JNI overhead.\nHowever, there is a large speedup in getInt, setInt,\nGetInstanceField, and GetStaticField.\n\nBefore timings (N5 --compiler-filter\u003deverything):\n\n                       benchmark      ns linear runtime\n          Class_getDeclaredField  782.86 \u003d\u003d\u003d\n                  Class_getField  832.77 \u003d\u003d\u003d\n                    Field_getInt  160.17 \u003d\n                    Field_setInt  195.88 \u003d\n                GetInstanceField 3214.38 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  GetStaticField 6809.49 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nAfter:\n          Class_getDeclaredField 1068.15 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  Class_getField 1180.00 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                    Field_getInt  121.85 \u003d\n                    Field_setInt  139.98 \u003d\n                GetInstanceField 1986.15 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  GetStaticField 2523.63 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nBug: 19264997\n\nChange-Id: Ic0d0fc1b56b95cd6d60f8e76f19caeaa23045c77\n"
    },
    {
      "commit": "abbabc8acca2231edc5d6e95d523e3fde9a0ba9f",
      "tree": "5c24460d536b03afcaa3ab3d3e8acbbac89e5fa3",
      "parents": [
        "03910065cd025ecb07781b85c2240be69c202d75"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 26 08:47:47 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Mar 27 16:05:47 2015 +0100"
      },
      "message": "JDWP: more checking for StackFrame commands\n\nChecks thread is suspended and the slot is valid for GetValues and\nSetValues command. Also improves error messages when we could not\nget or set a local value in the stack or we try to read an invalid\nreference from the stack.\n\nBug: 15680615\nChange-Id: I629099fc908e733edb712bd43e141695ed858f4f\n"
    },
    {
      "commit": "d8565456d29f4ad05f11cf84d2d2dac488508e06",
      "tree": "8c5eca4c2604e0edc1606ea151d78538098dc040",
      "parents": [
        "81adb4f8fd261be11d399d210029189e94888a9e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 26 09:41:50 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 26 13:34:27 2015 -0700"
      },
      "message": "Fix ClassLinker::MayBeCalledWithDirectCodePointer for JIT\n\nCurrently, we don\u0027t know if another method has a direct code\npointer or not. This should fix the case where breakpoints\noccasionally don\u0027t work with JIT.\n\nThe JIT now also checks that a method doesn\u0027t have any breakpoints\nbefore starting to compile it.\n\nBug: 17950037\n\nChange-Id: I17cfe874fe4825beba23903a5053d5cb27e106cb\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": "bf9fc581e8870faddbd320a935f9a627da724c48",
      "tree": "0a4a6c21fbd4c771b06fac186d32efa6722605b2",
      "parents": [
        "3d96846b6adedf57be64eb3873de0ca58ec4b827"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 13 17:21:25 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 13 17:32:48 2015 -0700"
      },
      "message": "Add more info to who called SuspendAll\n\nHelps diagnose related jank.\n\nChange-Id: I38191cdda723c6f0355d0197c494a3dff2b6653c\n"
    },
    {
      "commit": "0aa50ce2fb75bfc2e815a0c33adf9b049561923b",
      "tree": "9a3f9603ab30d5cbc7fc21aee0ceb48bbb0dd25a",
      "parents": [
        "e8e42f3548fd894f860912bb1b71ce6fa2d7daf3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 11:03:29 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 14:51:11 2015 +0000"
      },
      "message": "Remove ThrowLocation.\n\nNote that this is a cleanup change, and has no functionality change.\nThe ThrowLocation had no use anymore.\n\nChange-Id: I3d2126af1dc673cec3a0453ff3d56a172663a5f6\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": "14691c5e786e8c2c5734f687e4c96217340771be",
      "tree": "7c2156671b323c70ffdd1d48d5e2f1d1de79c5fc",
      "parents": [
        "3d7d2af4c6502b771b032ee9bf3ab30e78f9c60d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 05 10:40:17 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 09 10:09:33 2015 +0000"
      },
      "message": "Compute the right catch location for the debugger.\n\nAlso remove tls ThrowLocation, it is not needed anymore.\n\nChange-Id: I78fddf09ce968ca475e39c17fa76d699c589c8d9\n"
    },
    {
      "commit": "7642cfc90fc9c3ebfd8e3b5041915705c93b5cf0",
      "tree": "807b3c797483310ac23954c5eddb7441b91749c5",
      "parents": [
        "dc47e986941b1a3754447fabea272485f3f0f382"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 26 10:56:09 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 03 17:50:49 2015 +0000"
      },
      "message": "Change how we report exceptions to the debugger.\n\nThis is only a refactoring/cleanup. Bug fixes with respect\nto catch location, and more cleanups will follow.\n\nChange-Id: I30d3c6260b0c8f8115a811621397225b88f2063a\n"
    },
    {
      "commit": "e5f13e57ff8fa36342beb33830b3ec5942a61cca",
      "tree": "02e370ecc4e0d955f28bfc71a41015f94fbb19b7",
      "parents": [
        "354d58ba776866ea7b1c71f0d0848d5aaa013ae3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 09:37:21 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 10:47:02 2015 -0800"
      },
      "message": "Revert \"Revert \"Add JIT\"\"\n\nAdded missing EntryPointToCodePointer.\n\nThis reverts commit a5ca888d715cd0c6c421313211caa1928be3e399.\n\nChange-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af\n"
    },
    {
      "commit": "893bee6c8f05fdf7345bf348a8f9d24e9300bf8e",
      "tree": "355c13610857333335851c7aa18fb73471f86529",
      "parents": [
        "f548c54c69443ba94fcee89daca6f5f499d71e9a",
        "2bf93f48bbb417b358c9e3c77911ea6ec7307c15"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Feb 24 09:28:49 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 24 09:28:50 2015 +0000"
      },
      "message": "Merge \"JDWP: update thread synchronization\""
    },
    {
      "commit": "a5ca888d715cd0c6c421313211caa1928be3e399",
      "tree": "bdb08a2cbcf277ab7f02626a23b52a3fdf272ffe",
      "parents": [
        "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "message": "Revert \"Add JIT\"\n\nSorry, run-test crashes on target:\n0-05 12:15:51.633 I/DEBUG   (27995): Abort message: \u0027art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast\u003cuintptr_t\u003e(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc\u003d71e3366b code\u003d0x71e3362d size\u003dad000000\u0027\n10-05 12:15:51.633 I/DEBUG   (27995):     r0 00000000  r1 0000542b  r2 00000006  r3 00000000\n10-05 12:15:51.633 I/DEBUG   (27995):     r4 00000006  r5 b6f9addc  r6 00000002  r7 0000010c\n10-05 12:15:51.633 I/DEBUG   (27995):     r8 b63fe1e8  r9 be8e1418  sl b6427400  fp b63fcce0\n10-05 12:15:51.633 I/DEBUG   (27995):     ip 0000542b  sp be8e1358  lr b6e9a27b  pc b6e9c280  cpsr 40070010\n10-05 12:15:51.633 I/DEBUG   (27995): \n\nBug: 17950037\nThis reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4.\n\nChange-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3\n"
    },
    {
      "commit": "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4",
      "tree": "140026ff9638ff34050680b6c706b82fa1740b56",
      "parents": [
        "38fee8ef4bc0f4dbe2c6d1f5585895f0c4d16984"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 17 10:38:49 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 23 16:45:49 2015 -0800"
      },
      "message": "Add JIT\n\nCurrently disabled by default unless -Xjit is passed in.\n\nThe proposed JIT is a method JIT which works by utilizing interpreter\ninstrumentation to request compilation of hot methods async during\nruntime.\n\nJIT options:\n-Xjit / -Xnojit\n-Xjitcodecachesize:N\n-Xjitthreshold:integervalue\n\nThe JIT has a shared copy of a compiler driver which is accessed\nby worker threads to compile individual methods.\n\nAdded JIT code cache and data cache, currently sized at 2 MB\ncapacity by default. Most apps will only fill a small fraction of\nthis cache however.\n\nAdded support to the compiler for compiling interpreter quickened\nbyte codes.\n\nAdded test target ART_TEST_JIT\u003dTRUE and --jit for run-test.\n\nTODO:\nClean up code cache.\nDelete compiled methods after they are added to code cache.\nAdd more optimizations related to runtime checks e.g. direct pointers\nfor invokes.\nAdd method recompilation.\nMove instrumentation to DexFile to improve performance and reduce\nmemory usage.\n\nBug: 17950037\n\nChange-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca\n"
    },
    {
      "commit": "b3b173bbbd1d1cbad555de13c3fa6765f5078bce",
      "tree": "89d380f42aed1a4c60db40f8be7d22501eaafa32",
      "parents": [
        "e5f5953e744060fde3b4489cea4d934d529e3e32"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Feb 06 09:16:32 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Feb 17 22:42:43 2015 +0100"
      },
      "message": "Follow up 129144\n\nPasses JDWP options to debugger on runtime init so we no longer need\nto keep them on the heap.\n\nUpdates ParseJdwpOption to return Result for consistency.\n\nBug: 19275792\nChange-Id: I68b7e58908164d3e4cf9e3fbcc3dfab6ce0579a5\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": "f26e1b355333cbb5b064da3b4bbf2dc450a5eb40",
      "tree": "7860e465848418b128f39f0850972c9daa355a5a",
      "parents": [
        "f2eb160e685d544eda859e5df5e44b5b4c096760"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 29 10:47:10 2015 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat Jan 31 22:05:23 2015 -0800"
      },
      "message": "Check for null class of class\n\nExperimental fix.\n\nBug: 19193521\n\n(cherry picked from commit 65370e37b3fd9e53e3c1bce5757912e8309cd305)\n\nChange-Id: If59fe9a7bd16f3578ed036a5dbb2787862b33766\n"
    },
    {
      "commit": "597c4f0aeafed2b6fa69e53ece4be4f53115d707",
      "tree": "71e374bcc1600810fcf0b25b3194bb65ef2dbf2a",
      "parents": [
        "081d27817608c2ea035f2473c4ea1062a79bccef"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jan 26 17:37:14 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jan 26 20:15:02 2015 +0100"
      },
      "message": "JDWP: allocate single step control only when active\n\nOnly allocates SingleStepControl when a single step is requested in\na thread.\n\nBug: 19142632\nChange-Id: I830b7eaea86b516d3fac80ce14d41c66b4bd5415\n"
    },
    {
      "commit": "2cd334ae2d4287216523882f0d298cf3901b7ab1",
      "tree": "b72d3d07e5a04151caca96cae345075b6e4452b0",
      "parents": [
        "604e2828896fbb8663897d1e75112da7305ead4c"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 09 14:03:35 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 23 14:07:32 2015 -0800"
      },
      "message": "More of the concurrent copying collector.\n\nBug: 12687968\nChange-Id: I62f70274d47df6d6cab714df95c518b750ce3105\n"
    },
    {
      "commit": "4c4d609a3f1d67c76c855df13c2c1be9c315a6c9",
      "tree": "938783861d07d62b22fb161d9c645247720012cf",
      "parents": [
        "a5f74e15c14b8d2caa49a350ca6b5aa9183e2f7e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 22 17:02:27 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 23 10:59:28 2015 -0800"
      },
      "message": "Fix compaction bugs related to IdentityHashCode\n\nIdentityHashCode is a suspend point if monitor inflation occurs.\n\nChange-Id: I114021aed8b3f3437109ef622298de05e13b4e34\n"
    },
    {
      "commit": "0c8c303c20cdaaf54d26e45cc17dc5afb820d8ef",
      "tree": "d3289457acd74e6aa3296bbeef1f8a7619537eec",
      "parents": [
        "97d9f286971a4c1eec70e08f9f18f990d21780d5"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 16 16:54:35 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Jan 20 12:40:59 2015 -0800"
      },
      "message": "Clean up the locks around Heap::VisitObjects().\n\nThis is so that we could support suspending all threads when visiting\nobjects in the presence of a concurrent, moving collector.\n\nBug: 12687968\nChange-Id: Icc8e60630465afde948ebc6ea91d4ebaff5d7837\n"
    },
    {
      "commit": "e34fa1df67fbe0173b4ea9abddcc3ae3d0537037",
      "tree": "a5148f079b5671a95f60910c41981ebf91db3a02",
      "parents": [
        "9f06b1946ae3ef1d2fd75bbf7f0a288bc611fe58"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 14 14:55:47 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 15 12:23:28 2015 -0800"
      },
      "message": "Print more info in MarkSweep::VerifyRoot\n\nRefactored old root callback to use a new class called RootInfo.\nRootInfo contains all the relevant info related to the root\nassociated with the callback. The MarkSweep::VerifyRoot function\nnow uses this info to print the StackVisitor\u0027s described location\nif the GC root is of the type kRootJavaFrame.\n\nSome other cleanup.\n\nExample output:\nE/art     (12167): Tried to mark 0x123 not contained by any spaces\nE/art     (12167): Attempting see if it\u0027s a bad root\nE/art     (12167): Found invalid root: 0x123 with type RootJavaFrame\nE/art     (12167): Location\u003dVisiting method\n\u0027void java.lang.Runtime.gc()\u0027 at dex PC 0xffffffff (native PC 0x0)\nvreg\u003d0\n\n(cherry picked from commit 12f7423a2bb4bfab76700d84eb6d4338d211983a)\n\nBug: 18588862\nChange-Id: Ic5a2781f704e931265ffb3621c2eab4b2e25f60f\n"
    },
    {
      "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": "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": "4306ef8a7ec8e3887e51f64e80d940d974cc3ac3",
      "tree": "5afff3c97de1458886154aa5e84e1c0ae0edf11f",
      "parents": [
        "d30feca670d0af02783bbdfd4a29c5078c18bdc5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 19 18:41:47 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 06 14:12:18 2015 -0800"
      },
      "message": "Don\u0027t allow suspension from FindLocksAtDexPc\n\nTransitioning to suspended from runnable sometimes runs dump\ncheckpoints in ThreadStress which can cause deadlocks. This happens\nsince FindLocksAtDexPC runs the verifier which calls\nAllowThreadSuspension. This results in a blocked thread which holds\nthe monitor lock, and if another thread tries to do a monitor enter,\nit deadlocks while holding the mutator lock (assuming the GC is\nsuspending all).\n\nThe fix for avoiding this deadlock is not calling\nAllowThreadSuspension from FindLocksAtDexPc.\n\nBug: 18576985\nChange-Id: I7e5faaf3bbbd5b5f680de95d53c33b5106705b0c\n"
    },
    {
      "commit": "58a1c07b7f01ed9b85fb89bfd4dab7ddd138cfcd",
      "tree": "180260fcec7136d16f39fe3bae43071fd6d08add",
      "parents": [
        "7c378e4bc3aa6928f48d235e88e652e8b82beef4",
        "7d95565c84d91ae5dcec4b89728ada208633de0c"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 18 08:16:26 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 18 08:16:27 2014 +0000"
      },
      "message": "Merge \"Cleanup JDWP event matching\""
    },
    {
      "commit": "abe93e0098a2648fa286cfea01954737e32c7be9",
      "tree": "50830ce10a63def20a05e5a5660434472366d454",
      "parents": [
        "f610c0597e001cb1043aa4074afe25ae79a800e3"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Dec 17 16:35:50 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Dec 17 17:52:20 2014 +0100"
      },
      "message": "JDWP: fix setting multiple breakpoints in the same method\n\nWhen setting multiple breakpoints in the same method, we were\nincorrectly setting the deoptimization kind of all the breakpoints\nset after a first breakpoint. This resulted in incorrect\ndeoptimization/undeoptimization and even an abort. This was caught\nby running the debugger with sanity checks enabled with libartd.so.\n\nWe now set next breakpoints with the deoptimization kind of the first\nexisting breakpoint (if any) so we trigger right [un]deoptimization\nwhen adding or removing a breakpoint.\n\nBug: 18782753\nBug: 18651686\nChange-Id: Idf36ede73302fba83a154052bef701bedc8bc726\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": "bc689b7cefce2dd357abf25b82e5fcd690e27706",
      "tree": "d6395a7e2c5f57d0bee12bb5ee54fb99b97cfb40",
      "parents": [
        "29045735a55726235e5c2c5156809cdcac61d4d7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Dec 14 17:01:31 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 15 11:29:30 2014 -0800"
      },
      "message": "Clean up debugger\n\nSeparated logic for native vs java heap, cleaned up lock annotations.\nAdded missing end of space marker for bump pointer spaces.\n\nBug: 18730149\n\nChange-Id: I5bc21f0cee83b9cfa357e8a59658885c12cae09c\n"
    },
    {
      "commit": "7522c741d9660a56da2dd6a8e20b8cdf01a6c333",
      "tree": "2ac37a51bda6a9f1fdbfbcfc2e6bf89cf00fd006",
      "parents": [
        "ab6572b564db69e2877456ca6fbd3a00f4cc4b6b"
      ],
      "author": {
        "name": "Pavel Vyssotski",
        "email": "pavel.n.vyssotski@intel.com",
        "time": "Mon Dec 08 13:38:26 2014 +0600"
      },
      "committer": {
        "name": "Pavel Vyssotski",
        "email": "pavel.n.vyssotski@intel.com",
        "time": "Mon Dec 08 13:38:26 2014 +0600"
      },
      "message": "ART: Fix DDM client hang transmitting native heap dump with MALLOC_IMPL\u003ddlmalloc\n\nVM acting as a DDM client hangs transmitting native heap segment data when dlmalloc\nis used instead of default jemalloc. dlmalloc_inspect_all disallow any memory allocation\ninside heap callback. So cannot send any data walking the heap, the same for logging.\nCallback function also needs to acquire the heap bitmap lock. Finally, need to indicate\nend of a space to flush data.\n\nChange-Id: I9541962268dd58c2a4237fe1550c9e153252ab4a\nSigned-off-by: Pavel Vyssotski \u003cpavel.n.vyssotski@intel.com\u003e\n"
    },
    {
      "commit": "baede348efa86600e64fb9db43cec1eef07c86d9",
      "tree": "7ab2c2a69c72b7cd2ce1b7bf1ed9d26b07e4fd7e",
      "parents": [
        "989210eb453898bd94bf3527f18f6146b07aa4bb",
        "6963e44331258b131bcc0599b868ba15902d6d22"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 04 10:21:02 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 04 10:21:02 2014 +0000"
      },
      "message": "Merge \"JDWP: fix breakpoint for method in the image\""
    },
    {
      "commit": "6963e44331258b131bcc0599b868ba15902d6d22",
      "tree": "24ef16e739e99d3e9d980f2acde8dd301c236c37",
      "parents": [
        "220526b05d4365a1820a694c98527eda2d3dc980"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Nov 26 22:11:27 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 04 10:20:24 2014 +0100"
      },
      "message": "JDWP: fix breakpoint for method in the image\n\nWhen we set a breakpoint in a compiled method, we deoptimize it by\nchanging its entrypoint so it is executed with the interpreter.\nHowever, methods in the image can be called with their direct code\npointer, ignoring the updated entrypoint. In that case, the method\nis not executed with the interpreter and we miss the breakpoint.\n\nThis CL avoids that situation by forcing a full deoptimization so\neverything runs with the interpreter. However, if the image has been\ncompiled in PIC mode, we keep using selective deoptimization because\ndirect code pointer is not used in this mode.\n\nBug: 17965285\nChange-Id: Icaf8cbb7fe9ad01d36f7378c59d50d9ce42ae57f\n"
    },
    {
      "commit": "a0485607a4a4d8c683a9849f6f20902c4e1da7a4",
      "tree": "bbfa8e6182b702f161ea07efd53975fab1b6b736",
      "parents": [
        "08f1f50d6c2e8f247b8f5f19711d75a792851c7a"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Dec 02 15:48:04 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Dec 02 15:57:13 2014 -0800"
      },
      "message": "Move GetClassFromTypeIdx to ArtMethod.\n\nMove GetClassFromTypeIdx out of MethodHelper into ArtMethod in\npreparation for the removal of MethodHelper.\n\nChange-Id: I9c03dd8c821944c606ea08cdf92afc80c4275247\n"
    },
    {
      "commit": "08f1f50d6c2e8f247b8f5f19711d75a792851c7a",
      "tree": "dca490545d56168f7f9ae4a4616199b1b1c8ba0c",
      "parents": [
        "8443637f71a777a13317fe7635028d758a0adf97"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Dec 02 15:04:37 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Dec 02 15:12:27 2014 -0800"
      },
      "message": "Remove FieldHelper.\n\nChange-Id: I2d74e2d5b3c35a691c95339de0db9361847fca11\n"
    },
    {
      "commit": "ae214ee0064525e8e4a2e5f61b6d0b8f4f1900e8",
      "tree": "a7934d9e5da7c7c8c42caf320fca10cc8c1c401c",
      "parents": [
        "af2d5307c3beaf3f0e9712f88c56c53cecdc06a7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 24 18:03:01 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 24 18:03:01 2014 -0800"
      },
      "message": "ART: Fix inline dependency\n\nGetClassFromTypeIdx is defined in the -inl file.\n\nChange-Id: Ib5dbcea08dccee43ff70cac2e45cdbf210cb490c\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": "4ad5cd3e7d519484559ef778d96fb3f0be8919fa",
      "tree": "9870938a0552b4fe472d9994a55a3bf761fc69d5",
      "parents": [
        "741e287b60136db49ecf8da72f2b5ca48b0a39bd"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Nov 11 23:08:07 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 12 15:29:12 2014 -0800"
      },
      "message": "Modify the behavior of thread suspend shootouts.\n\nThe thread doing the suspension doesn\u0027t attempt to suspend the other thread\nunless it knows another thread isn\u0027t trying to suspend it. Use the suspend\ncount, and its lock, for this purpose.\nRe-enable ThreadStress test.\nBug: 15446488\n\nChange-Id: Idd34410c7b89d8abd6973e5699a15ca699472c78\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": "872dd8208f00c667af8d9e0fd07fdd0ada56d437",
      "tree": "2f69282f19c72ef157dad9fdc7b6c6daf8a1bf38",
      "parents": [
        "af62cf99a1a4320157e1074c1e65c5fbb0320349"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 30 11:19:14 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 30 11:19:14 2014 -0700"
      },
      "message": "Tidy and reduce ART library dependencies on the host.\n\nMove to shared rather than static libraries. Avoids capture of all static\nlibraries library dependencies.\n\nChange-Id: I2be96e92dad4ed1842d76b044745f2a2e15372eb\n"
    },
    {
      "commit": "02567379e7099682345fd59d45a23e17711c9ddd",
      "tree": "afab6024db00d1efb6236fadef9886aefe470973",
      "parents": [
        "a1e50cab308af9f9a94e8bd370111eeff5634914",
        "253fa555d9424a56c52879449eabe73d5c96cf61"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Oct 24 07:49:38 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 24 07:49:38 2014 +0000"
      },
      "message": "Merge \"Fix JDWP Virtualmachine.Resume command\""
    },
    {
      "commit": "a1e50cab308af9f9a94e8bd370111eeff5634914",
      "tree": "e72b7feea05593b8bd8c77bda7072e7bd813d891",
      "parents": [
        "6b8fbcb19f404b45ed01e9808f6d3254b13fc351",
        "e49e195c4bc2f20df0289c0bbb46f56839308dde"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Oct 24 07:49:17 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 24 07:49:19 2014 +0000"
      },
      "message": "Merge \"More use of WellKnownClasses for debugger\""
    },
    {
      "commit": "e49e195c4bc2f20df0289c0bbb46f56839308dde",
      "tree": "07a334d8f9369b0a72fa0f07cc00576f4f005a08",
      "parents": [
        "8fc5acfd382bdc0d7920e8a13439b64344a8988a"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Oct 13 11:27:13 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Oct 23 11:43:05 2014 +0200"
      },
      "message": "More use of WellKnownClasses for debugger\n\nUses WellKnownClasses cached fields for ThreadGroupReference-related\nJDWP commands.\nAdds fields of java.lang.ThreadGroup and java.util.ArrayList used by\nthe debugger.\n\nChange-Id: I54f7ef7e44cb61bec95657a69177bba1fbb7dc75\n"
    },
    {
      "commit": "cf7f19135f0e273f7b0136315633c2abfc715343",
      "tree": "ffa4d9efd9c45f4b6789acc1f534bb9327052b7e",
      "parents": [
        "aea6888b056be21adf762e066c7f33b8939b8a06"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 22 22:06:39 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 22 22:21:57 2014 -0700"
      },
      "message": "C++11 related clean-up of DISALLOW_..\n\nMove DISALLOW_COPY_AND_ASSIGN to delete functions. By no having declarations\nwith no definitions this prompts better warning messages so deal with these\nby correcting the code.\nAdd a DISALLOW_ALLOCATION and use for ValueObject and mirror::Object.\nMake X86 assembly operand types ValueObjects to fix compilation errors.\nTidy the use of iostream and ostream.\nAvoid making cutils a dependency via mutex-inl.h for tests that link against\nlibart. Push tracing dependencies into appropriate files and mutex.cc.\nx86 32-bit host symbols size is increased for libarttest, avoid copying this\nin run-test 115 by using symlinks and remove this test\u0027s higher than normal\nulimit.\nFix the RunningOnValgrind test in RosAllocSpace to not use GetHeap as it\nreturns NULL when the heap is under construction by Runtime.\n\nChange-Id: Ia246f7ac0c11f73072b30d70566a196e9b78472b\n"
    },
    {
      "commit": "253fa555d9424a56c52879449eabe73d5c96cf61",
      "tree": "15ad96b41587b1b03aefb401da02f7c26c03ba5e",
      "parents": [
        "3f5b8a1e7dfdf010591e17396d1d126740c5706c"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Oct 14 17:27:15 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Oct 21 19:21:41 2014 +0200"
      },
      "message": "Fix JDWP Virtualmachine.Resume command\n\nWe used to call ThreadList::UndoDebuggerSuspensions but this is not\ncorrect. Indeed Virtualmachine.Resume command should be performed\nas many times as all threads have been suspended (either by the\nVirtualmachine.Suspend command or the application of suspend policy\nALL for event).\n\nThis CL fixes this issue by adding ThreadList::ResumeAllForDebugger.\nIt decrements suspend count and debug suspend count by 1 (globally\nand for each thread).\n\nIt also handles the case where Virtualmachine.Resume is called while\nthreads have not been suspended (global debug suspend count is 0). In\nthis case we just print a warning and do nothing.\n\nBug: 17974047\nChange-Id: I25af22b1936760292d2a8c286e0867f2ae864108\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": "824e124cf4757720f54efbdf667c07c1db27d4a6",
      "tree": "86f64febfcf64281ae7188a1d8902d5bf7ca89b2",
      "parents": [
        "b7f1c06737c14cccca91153c714f58d99c69adcc",
        "4c69d7f4df78d20c631abc5f70b811a9944854d3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 10 22:47:08 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 10 22:47:08 2014 +0000"
      },
      "message": "Merge \"Hold mutator lock in DdmSendHeapSegments for all spaces\""
    },
    {
      "commit": "4c69d7f4df78d20c631abc5f70b811a9944854d3",
      "tree": "d4480e82ff05207d15a2f6af60223504ac702ed8",
      "parents": [
        "a9b097443f26a6df1a322a8fef50fdd1f26a410b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 10 12:45:50 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 10 15:45:35 2014 -0700"
      },
      "message": "Hold mutator lock in DdmSendHeapSegments for all spaces\n\nPreviously we were releasing the mutator lock in DdmSendHeapSegments\nand only reacquiring it for RosAlloc spaces. This was causing problems\nsince the HeapChunkCallback access object fields through mirror.\n\nBug: 17950534\n\n(cherry picked from commit d6527cf8e824d9057f32755f2ff4bdcf46c7095b)\n\nChange-Id: Idb307fd4c01450a07e3c9621e04d2aabf2c6a0b9\n"
    },
    {
      "commit": "fc787ecd91127b2c8458afd94e5148e2ae51a1f5",
      "tree": "ef48c0f511ee9bf4ed85607cc4d530bace7e6cae",
      "parents": [
        "8fa8c904f7c783204a1dc9438429391d256658da"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 21:56:44 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 22:22:46 2014 -0700"
      },
      "message": "Enable -Wimplicit-fallthrough.\n\nFalling through switch cases on a clang build must now annotate the fallthrough\nwith the FALLTHROUGH_INTENDED macro.\nBug: 17731372\n\nChange-Id: I836451cd5f96b01d1ababdbf9eef677fe8fa8324\n"
    },
    {
      "commit": "9ef78b59da51080882e47505896b420977fd79ae",
      "tree": "6c568756e4e16e68d5d3346261009350969d5b77",
      "parents": [
        "95f03e6a4737f90685fab86e98709f1c4393d5ef"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 25 17:03:12 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 26 16:04:56 2014 -0700"
      },
      "message": "Fix broken runtime SetStatsEnabled logic\n\nPreviously, Runtime::SetStatsEnabled wouldn\u0027t take stats_enabled_\ninto account when deciding whether or not to increment / decrement\nteh stats enabled counter. This resulted in counter underflows and\nother errors which caused some CTS tests to fail.\n\nAlso added some locking to prevent race conditions.\n\nBug: 17360878\n\n(cherry picked from commit a98ffd745bbecb2e84a492194950c0b94966546b)\n\nChange-Id: I21d241a58d35bd6a607aa2305c6da81720bd0886\n"
    },
    {
      "commit": "f0edfc355893d53d1104b05501c99ad5ccf305c4",
      "tree": "7e1fa49875759512f5d02b1c45435d3e3366b920",
      "parents": [
        "1ed5b27ee329208fd8ae22b8a9a61d708e2c1ffb"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Sep 25 11:46:46 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Sep 25 15:53:54 2014 -0700"
      },
      "message": "Some optimizations for the array alloc path.\n\n- Force Array::Alloc() to be inlined.\n- Simplify the array size overflow check.\n- Turn fill_usable into a template parameter.\n- Remove a branch in Array::DataOffset() and avoid\n  Primitive::ComponentSize(), which has a switch, in the array alloc\n  path.\n- Strength reductions in the array size computation by using component\n  size shifts instead of component sizes. Store component size shift\n  in the upper 16 bits of primitive_type field.\n- Speedup: ~4% (3435-\u003e3284) in MemAllocTest on N4.\n\nBug: 9986565\n\nChange-Id: I4b142ffac4ab8b5b915836f1660a949d6442344c\n"
    },
    {
      "commit": "8380c7c246337e66291a88f633dfaa250457bb0f",
      "tree": "b0e1a772012c1fefdb6550a987edcdb8387e9759",
      "parents": [
        "b36bba6d35e88687852b108c8d4b73b3ec2a9397",
        "2d5f39ed5aeaeb7ca22b07b4c6e8c56348ef8893"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 22 21:40:06 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 22 21:40:06 2014 +0000"
      },
      "message": "Merge \"Add ScopedAssertNoThreadSuspension\""
    },
    {
      "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": "400376f01747427313d4acf31b5ac508a8e368f7",
      "tree": "54b06d749425bd757fe7725e55a442a3b9c36e11",
      "parents": [
        "cff942b1f7ebb82e3d5e0a1334467544eced1575",
        "4d1e9ab57e4c822e8e678b1d0c1d6ad2abfa9b3e"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 22 09:10:17 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 22 09:10:18 2014 +0000"
      },
      "message": "Merge \"Do not hold breakpoint lock when running the verifier\""
    },
    {
      "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": "4d1e9ab57e4c822e8e678b1d0c1d6ad2abfa9b3e",
      "tree": "8b22e8904a40ace3f96982f7c39697bc25a68631",
      "parents": [
        "6aa606c9284ac31961f4c5b20c3645ac78acfaad"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 18 16:03:34 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 22 10:02:09 2014 +0200"
      },
      "message": "Do not hold breakpoint lock when running the verifier\n\nWhen setting a breakpoint, we need to know whether the method may be\ninlined. We run the method verifier but that may cause thread\nsuspension. Therefore we must not hold any lock at this time. The\nissue is we do hold the breakpoint lock so we fails a check in debug\nmode.\n\nThis CL ensures we don\u0027t hold the breakpoint lock when running the\nmethod verifier to detect inlining.\n\nBug: 17562442\nChange-Id: Ia6b128fc8917ce00025b68ae4ac62fb2a1f154e6\n"
    },
    {
      "commit": "2d5f39ed5aeaeb7ca22b07b4c6e8c56348ef8893",
      "tree": "b0b9a8d4c386555f009b825bd5fbd8ab31909c3b",
      "parents": [
        "24f4b816dd50793e8456dc60fe1b50856004d708"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 19 17:52:37 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 19 18:57:47 2014 -0700"
      },
      "message": "Add ScopedAssertNoThreadSuspension\n\nAdded a new class, ScopedAssertNoThreadSuspension.\nDeleted some unnecessary ScopedAssertNoThreadSuspension since\nVisitObjects already has a ScopedAssertNoThreadSuspension.\n\nChange-Id: I29ec0006120c39a27184d30e2d1d0c179e203776\n"
    },
    {
      "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": "69dbec6d9d55eeb2867949c2791d01dc9aa916c8",
      "tree": "be4eca8161eafb4a8466f5adf28a2c8f27cd37d1",
      "parents": [
        "926d8e99aa69151a271180299df68963688010d8"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Sep 15 18:03:41 2014 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Sep 17 14:31:55 2014 -0700"
      },
      "message": "Avoid suspending for alloc trace enabling when already suspended.\n\nBug: 17499772\n\n(cherry picked from commit 1d6ee090fddd4bfd35c304d6ceb929d5c529dfcc)\n\nChange-Id: Id09809c476c685f0a197ee75bb08638931364efd\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": "97ca64b01e14de77ba14067b26069405d0dba0bf",
      "tree": "dd39f9aff71c46dda43a00df6ce0bbc480536003",
      "parents": [
        "45ac9ff885f9fdc0eccf4080e112267c553b9281",
        "a06430c76981d545b5f2b64a7ef53c44c030cf73"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Sep 17 09:32:32 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 17 09:32:33 2014 +0000"
      },
      "message": "Merge \"Check for errors in ThreadGroupReference JDWP commands\""
    },
    {
      "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": "5a4b8a236030460651a3136397d23ca6744e7eb7",
      "tree": "0e43891398e416d3fa77c7de391bf4db4408e8ee",
      "parents": [
        "19f7c95491a053b818f914137fa73df0517b8792"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 11 08:30:08 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 15 19:50:12 2014 -0700"
      },
      "message": "ART: Rename Handle hierarchy\n\nBring the names in line with normal OO principles: ConstHandle\nbecomes Handle, and Handle becomes MutableHandle.\n\nChange-Id: I0f018eb7ba28bc422e3a23dd73a6cbe6fc2d2044\n"
    },
    {
      "commit": "844506b3f75b4643de8b326855daf03c2fbcc99c",
      "tree": "fe0804c1424e5c45314c260e019dabc592d0ba45",
      "parents": [
        "ebab3bbcaa09b644acd50ec18d79cb0d239bf347"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 12 19:59:33 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 12 19:59:33 2014 -0700"
      },
      "message": "Pass current thread as argument to alloc instrumentation.\n\nAvoids recomputation in the hot allocation path when instrumentation is\nenabled.\n\nChange-Id: Ic6e7d7d0744f4756787f75d21fddd3c50280b588\n"
    }
  ],
  "next": "7b078e8c04f3e1451dbdd18543c8b9692b5b067e"
}
