)]}'
{
  "log": [
    {
      "commit": "cdf05ab175c64adb49eb97d6dd35e885bbcad072",
      "tree": "8ff69a58a36eead9f4b6479c49e5309c0128e518",
      "parents": [
        "3b9097d502fbe47ec897db3ab64f70b5e0d309c9",
        "42cd43fa593e8f0427eb0ec158bef08814a6180b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 15 08:10:45 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 15 08:10:45 2014 +0000"
      },
      "message": "Merge \"Register debugger for interesting instrumentation events only\""
    },
    {
      "commit": "42cd43fa593e8f0427eb0ec158bef08814a6180b",
      "tree": "ad4231ee8a812e7702ddefdf6c9b9061a178d674",
      "parents": [
        "e1910f1d802dff79bba5ef61e1c4fd0b95f6e5b0"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue May 13 14:15:41 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 15 09:25:48 2014 +0200"
      },
      "message": "Register debugger for interesting instrumentation events only\n\nThis avoids the overhead of notifying events (like method entry/exit, field\nread/write, ...) from the interpreter when they are not requested on the JDWP\nside. It also avoids burning JDWP ids for objects and classes before we find\nout we do not need to report the event.\n\nWhen we register a JDWP event (like a breakpoint), we add the debugger as\na listener for the corresponding instrumentation event (like kDexPcChanged).\nOn the other hand, when a JDWP event is cleared, we remove the debugger as a\nlistener for the corresponding instrumentation event. To control we add/remove\nthe debugger as listener only once per instrumentation event, we use reference\ncounting.\n\nLike deoptimization, we can update instrumentation listeners only when when all\nmutator threads are suspended. To add or remove the debugger as listener, we\nextend the support of deoptimization requests to a more general support dealing\nwith instrumentation requests.\nWe add kRegisterForEvent and kUnregisterForEvent request kinds, respectively to\nadd or remove the debugger as a listener for a given instrumentation event.\nNote: we will rename the related classes, methods, ... to avoid pollution in\nthe code review.\n\nThis CL also fixes Instrumentation::IsActive to take field read/write events\ninto account.\n\nBug: 14401699\nBug: 14826953\nChange-Id: Ic896469e82a8589de419ebea4b9dc3116925f3ab\n"
    },
    {
      "commit": "8379b2256be5d2be4ad083a76e9f8ec403c4d405",
      "tree": "23a6cc143b59feaa2f6876dad1260b7c07e0f40d",
      "parents": [
        "e1910f1d802dff79bba5ef61e1c4fd0b95f6e5b0"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Feb 24 17:38:15 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon May 12 16:15:48 2014 +0200"
      },
      "message": "Combine JDWP location events\n\nThe runtime now sends location events BREAKPOINT, SINGLE_STEP, METHOD_ENTRY,\nMETHOD_EXIT and METHOD_EXIT_WITH_RETURN_VALUE in the same JDWP event packet\nwhen they relate to the same location.\n\nWe update the Dbg::UpdateDebugger method to take initial event flags and\nreturned value. It allows to call this method from DebugInstrumentationListener\nso we can treat method entry/exit events with breakpoint and single-step.\n\nIn the interpreter, we ensure we do not call Instrumentation::DexPcMovedEvent\nwhen Instrumentation::MethodEnterEvent has just been called or when we\u0027re about\nto call Instrumentation::MethodExitEvent. This prevents from sending duplicated\nevents.\n\nI measured the average performance impact on some benchmarks with a Nexus 4\nwithout a debugger attached:\n* 1%-2% for the computed-goto-based interpreter (default interpreter)\n* 5%-10% for the switch-based interpreter.\nThis is mostly due to the test of the boolean flag for the method entry event.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d68427\nBug: 11874828\nChange-Id: Ic4ff61375ff6b4ed5825adeac09f61f97b4be619\n"
    },
    {
      "commit": "ea8106321c7c05f8b135d7b4cdb34f5d1e6ed0e3",
      "tree": "db61c57b6c15aa8927758025b7ebd4ce278f8ace",
      "parents": [
        "6123d94cddf34f3fdb8ece55476e414e34662394",
        "7ec2f1ca3cbd021848da75d5566f7239ce29676f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 22 07:05:52 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 22 07:05:54 2014 +0000"
      },
      "message": "Merge \"Speed up single-stepping\""
    },
    {
      "commit": "c311d0c85e17773042daaa7a4abc58b3e3c0a0c1",
      "tree": "12103a18b43dd863ab7f3fd51ce9600ef4754d95",
      "parents": [
        "0a01b38244053e72f33339e733b3ae5e15a5966b",
        "3f52eafe5577b8489f90dc8ed5981b3455206147"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 15 06:43:14 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 15 06:43:14 2014 +0000"
      },
      "message": "Merge \"Prepare field watchpoint support\""
    },
    {
      "commit": "3f52eafe5577b8489f90dc8ed5981b3455206147",
      "tree": "7155df948d345c8a5a2d801c23b396af76527ba0",
      "parents": [
        "9b417e4f0f87da6bfe8dc5f02c987acfcb6dca31"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 04 17:50:18 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 15 08:39:18 2014 +0200"
      },
      "message": "Prepare field watchpoint support\n\nAdds field read/write events in the instrumentation. The debugger now registers\nas a listener for these events so JDWP field access and field modification\nevents can be reported.\n\nThis CL will be followed by another one to report these events from the\ninterpreter. Therefore no JDWP field access and field modification events\ncan be sent for now.\n\nBug: 8267708\nChange-Id: If2a93eb590805567d69015c83cce9cd2ab712cbd\n"
    },
    {
      "commit": "bb43b433c845e253a11346f0f03706d58a44f23c",
      "tree": "406fda2973407461cbadd7d0bf45afc109bfedad",
      "parents": [
        "9b417e4f0f87da6bfe8dc5f02c987acfcb6dca31"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 14 11:59:08 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 14 12:01:15 2014 +0200"
      },
      "message": "Clear unused roots from debugger\n\nSingleStepControl and DebugInvokeReq hold roots which are only used during a\nlimited amount of time. Clear these roots once we finish using them.\n\nAlso cleans some code around single-step.\n\nChange-Id: Ica2f65e04a4d60272199490cd40ad1803d3b9f02\n"
    },
    {
      "commit": "7ec2f1ca3cbd021848da75d5566f7239ce29676f",
      "tree": "fd2f221e9598fc7fa5066b2a9c746b228ef53faf",
      "parents": [
        "2be6fc74bce10ac68d3d1b39a5019f520ad170ea"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 27 20:06:47 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 09 18:23:28 2014 +0200"
      },
      "message": "Speed up single-stepping\n\nDuring single-stepping sequence, we need to deoptimize everything when we\nregister a single-step event and undeoptimize everything when it is done. This\ncauses a slow pattern where we continuously deoptimize-undeoptimize everything\nfor each single-step.\n\nThis CL introduces a special handling of single-step undeoptimization. We now\ndelay the undeoptimization to the next resume (one thread or all threads) or\nthe end of the debugging session. Indeed, a single-step event registration is\nalways followed by a resume command.\nAt the \"resume\" point, we know if a single-step event is registered and if we\nreally need to undeoptimize. At the \"registration\" point, we know we did not\nundeoptimized everything so we don\u0027t need to deoptimize everything again.\nTherefore, in a sequence of single-steps, we only do a full deoptimization for\nthe first single-step and a full undeoptimization for the last single-step.\n\nWe update logs at deoptimization points so we can track more precisely. Note\nthey are verbose logs that still must be enabled with -verbose:jdwp option.\n\nWe also make some improvement inside instrumentation:\n* updates Instrumentation::ShouldNotifyMethodEnterExitEvents to comply with its\nname.\n* compute frame id only once when looking for the corresponding instrumentation\nframe.\n* compute the OatMethod once in ClassLinker::GetPortableOatCodeFor to avoid\nlooking for it again.\n\nBug: 13577964\nChange-Id: If6fa198a676b515cd474b8c4d7bf7ef3626f2dc7\n"
    },
    {
      "commit": "4d25df3f76f864b7629ac8c0046d46997f293d8d",
      "tree": "31840831d8c81d06ffd575fdb0adc8403cd8dbb1",
      "parents": [
        "909f133bc938928a2403baccc983701cb9ebb17f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Mar 21 17:44:46 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Mar 26 11:46:43 2014 +0100"
      },
      "message": "Refactor deoptimization support in debugger\n\nThis CL prepares breakpoint support for inlined methods where we\u0027ll have to\ndeoptimize everything.\n\nWe move deoptimization-related information to Dbg class only (deoptimization\nrequest queue, full deoptimization event count and deoptimization lock). We\nreplace MethodInstrumentionRequest by DeoptimizationRequest. This is used to\nknow which kind of deoptimization is required for a particular event.\n\nIt also simplifies lock ordering a bit during event setup: we no longer need to\nhold the deoptimization lock while holding the breakpoint lock. Moreover, the\ndeoptimization lock should be held only after the event list lock.\n\nBug: 12187616\nChange-Id: Iff13f004adaeb25e5d609238bacce0b9720510e6\n"
    },
    {
      "commit": "3b05e9ba874449dbff65b01b8781001f7d93eea6",
      "tree": "f341766bff83ebea510344c4857af493725d3f58",
      "parents": [
        "027f7fa539514d2a50b448de1de39ac307087483"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 25 09:29:43 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 25 13:56:58 2014 -0700"
      },
      "message": "Add missing debugger root visiting.\n\nBug: 13634574\nChange-Id: I2a76f6c43f1d0ad1922f06deb40a71ff651129fd\n"
    },
    {
      "commit": "cb19ebf7609f74b223bd86c94f721498795f9bba",
      "tree": "0db31e4f83046b3d8159d4ba28d9298ff94e06c3",
      "parents": [
        "f17ce4c5e3b6882aa8849d1ed82df4238c436da2"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Mar 11 15:26:35 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Mar 17 09:15:31 2014 +0100"
      },
      "message": "Fix debugger crash in native method frames.\n\nThe main crash happens when we try to read (StackFrame::GetValues) or write\n(StackFrame::SetValues) values in native frames. We use the method\u0027s vmap to\nknow where Dalvik registers live but native methods don\u0027t have vmap. The fix\nis to reply with the OPAQUE_FRAME error which indicates local values are not\naccessible in the frame.\n\nWe prevent from dereferencing null code item which causes some crashes too.\nThis happens when we compute the line table (Method::LineTable) and variable\ntable (Method::VariableTable) of methods without code: native, proxy and\nabstract methods. We do not expect to encounter abstract methods though. We\ntake care of these kinds of method when mangling/demangling local value slots.\n\nWe also fix the location\u0027s pc of native and proxy frames where it must be -1\n(as 8-byte value). We\u0027ll use this property to detect such frames in the JDWP\ntests.\n\nBug: 13366758\nChange-Id: I78e3263fbf2681b5573571c846390d52b9193849\n"
    },
    {
      "commit": "52d131d8e71ae9ea915ea84a3f95d49547e8e661",
      "tree": "4a723664a9634747d273e12c87a396db160f50f6",
      "parents": [
        "37d4c1db4d705f5a28001f65afdd68d0527948d8"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 13 16:17:40 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 13 17:03:50 2014 +0100"
      },
      "message": "Fix thread suspension assertion in debugger.\n\nUpdates Dbg::GetThreadGroup to ensure we do call EndAssertNoThreadSuspension\nafter StartAssertNoThreadSuspension and not returning in the middle. Note this\nonly happens in debug mode where this assertion is enabled.\n\nAlso add missing thread safety annotations.\n\nBug: 13425576\nChange-Id: Idb9f32d289038b77771369c1283774676ff433c7\n"
    },
    {
      "commit": "719d1a33f6569864f529e5a3fff59e7bca97aad0",
      "tree": "fcd84efd7b9806b93ec1a44e2317e6f882e7fe0e",
      "parents": [
        "5365eea9940269b662cfbe103caa348816ff1558"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 06 12:13:39 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 06 19:16:01 2014 -0800"
      },
      "message": "Enable annotalysis on clang ART builds.\n\nFix clang build errors aswell as restructure locking/mutex code for correct\nthread safety analysis support.\nReorder make dependencies so that host builds build first as they should\nprovide better compilation errors than target.\nRemove host\u0027s use of -fno-omit-frame-pointer as it has no value with correct\nuse of CFI, which we should have.\n\nChange-Id: I72cea8da9a3757b1a0b3acb4081feccb7c6cef90\n"
    },
    {
      "commit": "83c8ee000d525017ead8753fce6bc1020249b96a",
      "tree": "d5167ed15dee2629905ac3640b6ea0578d4ae312",
      "parents": [
        "7cba217ab0661d74deccbb97160cdf60b74d4ea3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 28 14:50:23 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 11 10:40:10 2014 -0800"
      },
      "message": "Add root types and thread id to root visiting.\n\nEnables us to pass the root type and thread id to hprof.\n\nBug: 12680863\nChange-Id: I6a0f1f9e3aa8f9b4033d695818ae7ca3460d67cb\n"
    },
    {
      "commit": "412c7fced915fc8d4d5e4166e977d55c809168a6",
      "tree": "b8efee7f46a440f3e89765b1e9b2aa6454839c87",
      "parents": [
        "109e2b34799a377a0407781fc32ec1ec607d6c41"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Feb 07 12:18:39 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Feb 08 15:23:36 2014 -0800"
      },
      "message": "Make debugger / jdwp compaction safe.\n\nFixed GetInstances, GetReferringObjects, CountInstances to use\nVisitObjects instead of the live bitmap.\n\nWe now treat the object registry as system weaks and update the\nobjects when/if they move. Also added the recent_allocation_records_\nas roots.\n\nBug: 12936165\n\nChange-Id: I615c289efbf2977ceab5c4ffa73d216d799e6e33\n"
    },
    {
      "commit": "ef7d42fca18c16fbaf103822ad16f23246e2905d",
      "tree": "c67eea52a349c2ea7f2c3bdda8e73933c05531a8",
      "parents": [
        "822115a225185d2896607eb08d70ce5c7099adef"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jan 06 12:55:46 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 06 23:20:27 2014 -0800"
      },
      "message": "Object model changes to support 64bit.\n\nModify mirror objects so that references between them use an ObjectReference\nvalue type rather than an Object* so that functionality to compress larger\nreferences can be captured in the ObjectRefererence implementation.\nObjectReferences are 32bit and all other aspects of object layout remain as\nthey are currently.\n\nExpand fields in objects holding pointers so they can hold 64bit pointers. Its\nexpected the size of these will come down by improving where we hold compiler\nmeta-data.\nStub out x86_64 architecture specific runtime implementation.\nModify OutputStream so that reads and writes are of unsigned quantities.\nMake the use of portable or quick code more explicit.\nTemplatize AtomicInteger to support more than just int32_t as a type.\nAdd missing, and fix issues relating to, missing annotalysis information on the\nmutator lock.\nRefactor and share implementations for array copy between System and uses\nelsewhere in the runtime.\nFix numerous 64bit build issues.\n\nChange-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822\n"
    },
    {
      "commit": "138dbfc3336e379d74d157086f69a0fbe830089b",
      "tree": "f5fa88466e6ab339d2a6faf9c9105bafcaee3ea7",
      "parents": [
        "62e45483db4aa1be096d3ce91903e01ef52fb901"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Dec 04 18:15:25 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jan 13 15:08:24 2014 +0100"
      },
      "message": "Selective deoptimization.\n\nUpdate the instrumentation to allow selective deoptimization.\n\nSeparate instrumentation listener registration from stubs configuration. A\nlistener is now responsible for configuring the appropriate stubs.\n- The method tracing listener installs instrumentation entry/exit stubs or\nthe interpreter depending on the accuracy of events we want (controlled by\nkDeoptimizeForAccurateMethodEntryExitListeners).\n- The debugger registers itself as an instrumentation listener but does not\nmodify methods entrypoints. It only does this on demand when deoptimizing one\nmethod or all the methods.\n\nThe selective deoptimization is used for breakpoint only. When a breakpoint is\nrequested, the debugger deoptimizes this method by setting its entrypoint to\nthe interpreter stub. As several breakpoints can be set on the same method, we\ndeoptimize only once. When the last breakpoint on a method is removed, we\nreoptimize it by restoring the original entrypoints.\n\nThe full deoptimization is used for method entry, method exit and single-step\nevents. When one of these events is requested, we force eveything to run with\nthe interpreter (except native and proxy methods). When the last of these\nevents is removed, we restore all methods entrypoints except those which are\ncurrently deoptimized.\n\nDeoptimizing a method requires all mutator threads be suspended in order to\nwalk each thread\u0027s stack and ensure no code is actually executing while we\nmodify methods entrypoints. Suspending all the threads requires to not hold\nany lock.\nIn the debugger, we deoptimize/undeoptimize when the JDWP event list changes\n(add or remove a breakpoint for instance). During the update, we need to hold\nthe JDWP event list lock. This means we cannot suspend all the threads at this\ntime.\nIn order to deal with these constraints, we support a queue of deoptimization\nrequests. When an event needs selective/full deoptimization/undeoptimization,\nwe save its request in the queue. Once we release the JDWP event list lock, we\nsuspend all the threads, process this queue and finally resume all the threads.\nThis is done in Dbg::ManageDeoptimization. Note: threads already suspended\nbefore doing this remain suspended so we don\u0027t \"break\" debugger suspensions.\n\nWhen we deoptimize one method or every method, we need to browse each thread\u0027s\nstack to install instrumentation exit PC as return PC and save information in\nthe instrumentation stack frame. Now we can deoptimize multiple times during\nthe execution of an application, we need to preserve exisiting instrumentation\nframes (which is the result of a previous deoptimization). This require to push\nnew instrumentation frames before existing ones so we don\u0027t corrupt the\ninstrumentation stack frame while walking the stack.\n\nBug: 11538162\nChange-Id: I477142df17edf2dab8ac5d879daacc5c08a67c39\n"
    },
    {
      "commit": "d38667a055d507492fd05f78519a7e1f0b85ea03",
      "tree": "d71f7695f0ec3f4fa5beae55a81789592b295502",
      "parents": [
        "2054553237998043f0cd3d6b9fef799a4e6d95c0"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Nov 25 15:43:54 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Nov 25 17:02:54 2013 +0100"
      },
      "message": "Minor field name cleanup in debugger.\n\nUse the same naming convention for all fields of DebugInvokeReq structure.\n\nChange-Id: Ieaf65eef592f96efa47975eef15334279ed4fc8a\n"
    },
    {
      "commit": "2054553237998043f0cd3d6b9fef799a4e6d95c0",
      "tree": "417ccbc5f75eaf36cfd0b62c8eb169b29975dddc",
      "parents": [
        "212d2ab3f5b92095e90008f27293531fc311e96d",
        "61b7f1b05d1fe12d4009316263bf990903e4edff"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Nov 20 08:47:55 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 20 08:47:56 2013 +0000"
      },
      "message": "Merge \"Move single-step control into thread.\" into dalvik-dev"
    },
    {
      "commit": "61b7f1b05d1fe12d4009316263bf990903e4edff",
      "tree": "7929d410750a8099ef254d3858d1da87d595bac8",
      "parents": [
        "03aca12cc4b15a4d2fe1c6acbcb1d62b2baa9eb4"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Nov 15 15:59:30 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 19 21:13:27 2013 +0100"
      },
      "message": "Move single-step control into thread.\n\nThis CL moves single-step control into the Thread structure. This is stored in\nThread::single_step_control_ member. This allows to support single-stepping of\nmultiple threads at the same time.\n\nSince each thread holds its single-step information, we no longer need to use\nthe breakpoint lock to support single-stepping. It helps reduce lock contention\non this lock while debugging.\n\nAll JDWP tests passed on the host and on the target with this CL.\n\nBug: 11667502\nChange-Id: I886d5c8c625ca5a072803e296c32eec5f7e9e82d\n"
    },
    {
      "commit": "579b02416e05e32e535126e1ed61613a2cdb030e",
      "tree": "4431587a30c1d5a3e7c0435decbd7ac21104bf7a",
      "parents": [
        "e4a50ee34695a9d90cf03fbb1e8afd1e434f6ee1"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Nov 18 13:16:49 2013 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Nov 19 11:16:44 2013 -0800"
      },
      "message": "Add support for JDWP METHOD_EXIT_WITH_RETURN_VALUE events.\n\nBug: 11569539\nChange-Id: Ibc7a80df83470ffd726d73695a05f4938248f292\n"
    },
    {
      "commit": "fc0e94bed3f88ed7e50854fd8dfaf5dcb345250f",
      "tree": "5cfbe05084351576e9659cb8f7b66dcb6163a37b",
      "parents": [
        "576fe9d4181c749aa510e32d2521ed4192bdfda0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Sep 23 23:51:32 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 24 17:07:24 2013 -0700"
      },
      "message": "StringPiece clean up.\n\nProfile guided clean up.\nTry to avoid creating StringPieces with the contents of a dex file where\nthe length is known.\nTry to avoid RegTypeCache::FromDescriptor when there\u0027s a class available.\nMake ConstantType::ConstantValue inlinable.\nSaving of about 50ms from a 2 threaded ThinkFree compile on host.\n\nChange-Id: I47a12c3c76f46e2c9805be1c3a3e3870fe1f5d85\n"
    },
    {
      "commit": "920af3e556c730a5fbdab90a6d0ec1a2dbe8940b",
      "tree": "29d7aa78d4a4fec87a403c8e2c93214d19b7cc99",
      "parents": [
        "10cc81056261625902a8a073bafb9f499eec4ff7"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Aug 28 15:46:38 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 29 10:03:52 2013 -0700"
      },
      "message": "Fix thread status in THST chunk to use JDWP thread state.\n\nBug: 10492287\n\nChange-Id: I830a2ce71d02c5b09c7040583be98d818eef9385\n"
    },
    {
      "commit": "ea46f950e7a51585db293cd7f047de190a482414",
      "tree": "9dddc8073547a2dcb58a19e1728932a89cb149c3",
      "parents": [
        "5e3572709b5a5d59957f835db4f73760ecef08da"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 30 01:26:50 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 18:09:46 2013 -0700"
      },
      "message": "Refactor java.lang.reflect implementation\n\nCherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1.\n\nMove to ArtMethod/Field instead of AbstractMethod/Field and have\njava.lang.reflect APIs delegate to ArtMethod/ArtField.\n\nBug: 10014286.\n\nChange-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7\n"
    },
    {
      "commit": "7934ac288acfb2552bb0b06ec1f61e5820d924a4",
      "tree": "43f3acd8af7fd34d4ae7b64f6e06bb8429d74bb8",
      "parents": [
        "fb331d7ca004f39608fcfdae49d38df90c702ea9"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 10:54:15 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 11:55:10 2013 -0700"
      },
      "message": "Fix cpplint whitespace/comments issues\n\nChange-Id: Iae286862c85fb8fd8901eae1204cd6d271d69496\n"
    },
    {
      "commit": "2d88862f0752a7a0e65145b088f49dabd49d4284",
      "tree": "3fac6bbd9a0ff3836f361e46579151c8a93420b6",
      "parents": [
        "751d4ed43e8118f145edf18db4d987daf7dabbae"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 17:02:00 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 17:02:52 2013 -0700"
      },
      "message": "Fixing cpplint readability/casting issues\n\nChange-Id: I6821da0e23737995a9b884a04e9b63fac640cd05\n"
    },
    {
      "commit": "f69863b3039fc621ff4250e262d2a024d5e79ec8",
      "tree": "b6d40c4019de2155f8753f83b4750bd3a3514d7a",
      "parents": [
        "93ba893c20532990a430741e0a97212900094e8c"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 21:53:13 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 23:23:12 2013 -0700"
      },
      "message": "Fix cpplint whitespace/newline issues\n\nChange-Id: Ie2049d9f667339e41f36c4f5d09f0d10d8d2c762\n"
    },
    {
      "commit": "fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d",
      "tree": "5fc7f5b941724a62f8e3411df09fae431ff5e3cf",
      "parents": [
        "56d947fbc9bc2992e2f93112fafb73e50d2aaa7a"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 14:40:12 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 16:49:05 2013 -0700"
      },
      "message": "Fix multiple inclusion guards to match new pathnames\n\nChange-Id: Id7735be1d75bc315733b1773fba45c1deb8ace43\n"
    },
    {
      "commit": "7940e44f4517de5e2634a7e07d58d0fb26160513",
      "tree": "ac90242d96229a6942f6e24ab137bc1f8f2e0025",
      "parents": [
        "5cd9e3b122f276f610980cbaf0d2ad6ed4cd9088"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 13:46:57 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 17:49:01 2013 -0700"
      },
      "message": "Create separate Android.mk for main build targets\n\nThe runtime, compiler, dex2oat, and oatdump now are in seperate trees\nto prevent dependency creep.  They can now be individually built\nwithout rebuilding the rest of the art projects. dalvikvm and jdwpspy\nwere already this way. Builds in the art directory should behave as\nbefore, building everything including tests.\n\nChange-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81\n"
    },
    {
      "commit": "62d6c772205b8859f0ebf7ad105402ec4c3e2e01",
      "tree": "e2f2ba6d71ed5a39c9f6909e3f7c08e998053315",
      "parents": [
        "c9b17c7ee96cd04fac9048aab624ed554fe260bf"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 27 08:32:07 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Apr 08 14:24:13 2013 -0700"
      },
      "message": "Interpreter entries and instrumentation as a listener.\n\nMake the instrumentation responsible for whether we want method entry/exit\nstubs, and allow it to use interpreter entry stubs when instruction by\ninstruction instrumentation is required. Improve deoptimization so more JDWP\ntest cases are passing.\n\nRefactor exception debug posting, in particular improve reporting in the\ninterpreter. Improve class linker exception throwing so that broken dex files\nare more likely to be reported. Fixes the performance issue Bug: 8410519.\n\nFix some error reporting lock level errors for the large object space. Make\nfast object verification faster.\n\nAdd some debug mode robustness to finding dex PCs in GC maps.\n\nAdd printf attributes to JniAbortF and fix errors.\n\nExpand run-test 044 to test return behaviors and fix issues with not throwing\nappropriate exceptions for proxies.\n\nEnsure causes are reported with a class linker NoClassDefFoundError and JNI\nNoSuchFieldError.\n\nRemove unused debugMe and updateDebuggerFromCode.\n\nThere\u0027s a minor sizing tweak to the arg array builder, and an extra reference\narray check in the interpreter.\n\nSome clean-up of trace code.\n\nFix reg type cache destructor if it is called after the reg type cache is\nshutdown (as is the case in oatdump).\n\nChange-Id: I6519c7b35df77f978d011999354c864f4918e8ce\n"
    },
    {
      "commit": "0f827169742aad6209d830db773a101849c32a83",
      "tree": "df06bd3d9fa91757d2c87fbe891007184f823e9d",
      "parents": [
        "eb5cb608fcb0d636961653ad561b2c7ee40de1ad"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 26 12:12:58 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 26 12:12:58 2013 -0800"
      },
      "message": "Fix JDWP ObjectRegistry lock ordering.\n\nAlso make debugging lock ordering violations nicer by using our\nLockLevel operator\u003c\u003c.\n\nChange-Id: Ic15ebe70363a90a09f6491bd5c336a604e9d6c48\n"
    },
    {
      "commit": "4b9702c6912c6f8745a77f5b5af56e7fe196e7c2",
      "tree": "02fee3631b7f3b60eb15f791b5dd004b27d6a571",
      "parents": [
        "64f574f474aa77c72778640ab21f8cfa72546812"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 20 18:13:24 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 21 07:41:59 2013 -0800"
      },
      "message": "Add a JDWP::Request type to replace the old uint8_t* and int.\n\nThis also lets us check that all the data in a (successful) request\nis actually read, though doing so caught two bugs in the tests, and\nmay well catch bugs in the actual debuggers.\n\nChange-Id: Ibed402e6f1c0c7a1d19d61f0be9bddd0c2f5a388\n"
    },
    {
      "commit": "64f574f474aa77c72778640ab21f8cfa72546812",
      "tree": "c90d3ef8f56144e61a4a043138a5118c3c9e7b9a",
      "parents": [
        "492899e445c21f09db458c76d773d571cc6cc0ac"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 20 14:57:12 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 20 15:46:06 2013 -0800"
      },
      "message": "Implement EnableCollection, DisableCollection, IsCollected, and fix Exit.\n\nRewrites the object registry to not just be one big leak. We use jweaks\nby default, which means (a) the GC doesn\u0027t need to know anything about us\nand (b) we don\u0027t cause unnecessary heap retention. We promote to regular\nJNI global references if the debugger asks us to.\n\nThe problem with VirtualMachine.Exit turned out to be that you\u0027re supposed\nto send a success reply to the command before exiting. This is a bit awkward\nwith our current division of responsibilities, but it lets us pass another\ntest.\n\nAlso log a summary of our replies when -verbose:jdwp is in effect, not\njust the requests.\n\nChange-Id: Idb33e99fe7d8bee7a79152d81fee42e2af00852b\n"
    },
    {
      "commit": "2dd0e2cea360bc9206eb88ecc40d259e796c239d",
      "tree": "9d619dc9508cbe73e4793bf6f08cbc761abfb48a",
      "parents": [
        "ac21b797b3a425975d656d6b84a7b24401d35f42"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 24 12:42:14 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jan 30 16:48:31 2013 -0800"
      },
      "message": "Directory restructuring of object.h\n\nBreak object.h into constituent files.\nReduce number of #includes in other GC header files.\nIntroduce -inl.h files to avoid mirror files #include-ing each other.\nCheck invariants of verifier RegTypes for all constructors.\n\nChange-Id: Iecf1171c02910ac152d52947330ef456df4043bc\n"
    },
    {
      "commit": "a96836a4115ad08762567c10bd4d198c5b644985",
      "tree": "ae523d318a1936108b9f137af3681de930628aa1",
      "parents": [
        "fa011c82efce92a8e0e739ae9732b4c6f3903294"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 17 12:27:49 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 17 12:27:49 2013 -0800"
      },
      "message": "Improve -verbose:jdwp.\n\nMove toward automated logging instead of ad hoc logging in every command.\n\nChange-Id: I55427022374390745209677bae4e0b3146a9d126\n"
    },
    {
      "commit": "9777ba230c83a0edcbda2cf7b208339e77bf171b",
      "tree": "253559eb1e962c3b21cf55cd59addc10823d65c4",
      "parents": [
        "ff7ae7adf223b3485f4153442e4841189601af1e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 17 09:04:19 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 17 09:04:19 2013 -0800"
      },
      "message": "Implement Method.Bytecodes.\n\nChange-Id: Ib24c1244818c1d5aa10606a4998c0e52fa2b70bd\n"
    },
    {
      "commit": "0cbaff584244ee767027aff35cd3c625aaee2994",
      "tree": "6209981f3814b9d43f8152f261455eb3f1fab15d",
      "parents": [
        "f9a52cd81ad39aacd1a5c41478d5ee0cb6dff1bf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 16 15:28:01 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 16 16:42:41 2013 -0800"
      },
      "message": "Implement ObjectReference.ReferringObjects.\n\nBug: 4159882\nChange-Id: Iac145715bec80b5900256d3f6bdb18e283eb9a12\n"
    },
    {
      "commit": "3b78c949ab839d21454bc6f18c7640d2ae8c22f3",
      "tree": "0a12766007b742f208f2ec8617c8d2a6d6d955a9",
      "parents": [
        "ec0f83d95e2174c97e93279ffa71642be7e12b60"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 15 17:35:41 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 15 17:35:41 2013 -0800"
      },
      "message": "Implement ReferenceType.Instances.\n\nChange-Id: I6a72fc4c748e7041fedcb615eca2b86b1f28bb63\n"
    },
    {
      "commit": "ec0f83d95e2174c97e93279ffa71642be7e12b60",
      "tree": "b8ac0c238f6dddff2e49fb2002834a369594abb1",
      "parents": [
        "4028312f6f4b49fd69992daf28cd37dd32e79a47"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 15 16:54:08 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 15 16:54:08 2013 -0800"
      },
      "message": "Implement JDWP VirtualMachine.InstanceCounts.\n\nChange-Id: I6df66787dee8af67f65460023bcf223eec1ec7da\n"
    },
    {
      "commit": "734b8c62cc637c25f4c2481ca6a48adbd7209c6c",
      "tree": "1e3176c62b1155f58b157dd965d8b64e26ccaaf2",
      "parents": [
        "d2ece2e84931dbfaddb1f77c9dba4bd1a8762b5f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 11 15:32:45 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 11 15:32:45 2013 -0800"
      },
      "message": "Implement ThreadReference.OwnedMonitorsStackDepthInfo.\n\nChange-Id: I5e1ac7b2aeef7b1eac9518eba14a8f6555acd712\n"
    },
    {
      "commit": "f9501700f51586cb6ba7cc0ffcb5a920bd64adf1",
      "tree": "e619fc67e4197452b45e5382af4247629da5387c",
      "parents": [
        "67efe8cb257d3f687fe46b68f4fc8aca352b2f0a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 11 11:22:27 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 11 11:40:18 2013 -0800"
      },
      "message": "Implement ThreadReference.CurrentContendedMonitor and ThreadReference.Interrupt.\n\nThe JDWP test for CurrentContendedMonitor also uses Interrupt.\n\nChange-Id: Id1f6add29b578a0494da672d21dd54f23e866475\n"
    },
    {
      "commit": "4993bbc8eda377804e585efd918f8ab9d9eab7d4",
      "tree": "bc49a14ce0c2718155444ac67152382e8c313326",
      "parents": [
        "16848f6c5c4d8394d491e887d7d805beddf173ad"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 10 15:41:25 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 10 16:05:44 2013 -0800"
      },
      "message": "Implement ThreadReference.OwnedMonitors.\n\nFix the method verifier so it can cope with not being able to resolve\ntypes in the application class loader, so we can find monitors held in\napplication code (this will improve SIGQUIT too).\n\nAlso remove the sort|uniq of dex pcs by just recording the last work\nline we see.\n\nChange-Id: I86ff27b42800a858489d112931c9aed2fb85ebdc\n"
    },
    {
      "commit": "f327e07b37e349b1ec5eaad6dc294a9b7a081d20",
      "tree": "2c64b1f6212045a529c18d1dbe04b3da8fd1d6e9",
      "parents": [
        "9e0c175a0cea5c8c88a6927e6375554118f74a82"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 09 16:01:26 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 09 18:07:12 2013 -0800"
      },
      "message": "Implement ObjectReference.MonitorInfo.\n\nChange-Id: Iefc276939b9e569f4ea4d7a5af9a28276a3fb632\n"
    },
    {
      "commit": "f15f4a0136a7b797117355768851bc421b3afc93",
      "tree": "160e0a242b91520ddd005af35680a40fab400449",
      "parents": [
        "88d630950cb5c6a1cb6457ce03a17c074ae13628"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 09 10:09:38 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 09 10:28:56 2013 -0800"
      },
      "message": "Remove Dbg::IsSuspended, which was checking the wrong thing.\n\nIt was also unnecessarily racy.\n\nChange-Id: I9d59ac81ffb5b178ca9d2a00d895a272321adec9\n"
    },
    {
      "commit": "88d630950cb5c6a1cb6457ce03a17c074ae13628",
      "tree": "1d6b9741bc621d1f2ea5894cbc2ac4c56293d8dc",
      "parents": [
        "8b64424860a5625782c363adba41825e5af6357f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 09 09:55:54 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 09 09:55:54 2013 -0800"
      },
      "message": "Clean up debugger orthography.\n\nMainly just for ids, and not in the JDWP code. Fixing everything at\nonce is just not practical.\n\nChange-Id: I06464d5765b33dca65eb3c24bdd8aaf84b9631a5\n"
    },
    {
      "commit": "221229cb523f849f165fdafbf9785010963715da",
      "tree": "87f4b27cd85b40dad97d87780440a8b4225d7dda",
      "parents": [
        "162fd33474038f0de0388338ca007ecf400bb3df"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 08 18:17:50 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 08 18:17:50 2013 -0800"
      },
      "message": "Handle zombie threads in JDWP.\n\nMostly a matter of making DecodeThread more robust and passing JDWP::JdwpError\nstatuses around, but enough work that I feel justified in having left this as a\nTODO for so long.\n\nChange-Id: I779b6fcc6355dc6288355742f4b7babc531b8e38\n"
    },
    {
      "commit": "9b5aa6f2029d3dae305009ac72e44ca97ca7b638",
      "tree": "9e33e741ecd850304394b952e55e8ae809a1ba54",
      "parents": [
        "3235d00248f7b183b4f226a4f0de63673df0ac00"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Tue Dec 18 11:47:11 2012 -0800"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Tue Dec 18 11:47:11 2012 -0800"
      },
      "message": "Locking and exception handling fixes for debugger/interpreter.\n\nChange-Id: I20223113355a2d7b5deb4658035be2f788765fc1\n"
    },
    {
      "commit": "09bfc6a50bdc9366b13ac3ab479d9278c853d90a",
      "tree": "f3d528939b038e5f0a6d16cbb83934ddc2b6ffc0",
      "parents": [
        "89c41e5f2fa10e7b97698b9714bd4883a73132f0"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Tue Dec 11 18:11:43 2012 -0800"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Dec 12 13:25:25 2012 -0800"
      },
      "message": "Some fixes for JDWP with the interpreter.\n\n- GetStackDepth checks if the thread is suspended, unless the thread is\n  itself.\n- Scoped the breakpoints lock during UpdateDebugger to prevent it being\n  held during PostLocationEvent.\n- Removed locking of breakpoints lock in DebugCallbackContext since it\u0027s\n  already holding it.\n- Added level for breakpoints lock to prevent lock level violations.\n\nChange-Id: I3588c9696bb57ada3c8c64dc1d95ae23cdf2b107\n"
    },
    {
      "commit": "c604d731730b43231f63040c8db1d58304da0cf3",
      "tree": "bb9cd6aa56eb3ba88ff27967efc3cc08da150b87",
      "parents": [
        "0b0b515934b83385e1cea448113783e0b22849ed"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Oct 14 16:09:54 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 15 15:36:32 2012 -0700"
      },
      "message": "Implement mutex requeueing for cv broadcasts.\n\nMake the mutex guarding a condition variable part of its state. On a\nbroadcast requeue waiters on the mutex so they are awoken as the mutex\nis unlocked (thereby avoiding thundering herds). Explicit futex use\nstill guarded behind ART_USE_FUTEXES which remains disabled as I\u0027m\nunhappy with some of the warts of mutex usage. Uploading so that the API\nchanges can stabilize.\n\nChange-Id: Iedb601856ccd8bbc3a64da4ba0cee82246e7bcbf\n"
    },
    {
      "commit": "66f19258f9728d4ffe026074d8fd429d639802fa",
      "tree": "fd94009774c6cbbb1528ea096e606133bd35f104",
      "parents": [
        "a5e1e3d153990845d80cb8d013157210f11a473c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 18 08:57:04 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 21 17:32:56 2012 -0700"
      },
      "message": "Change dex cache to be java object instead of array, add pointer to dex file in dex cache.\n\nGeneric clean up to facilitate having GDB macros for Pretty* helper functions.\n\nImproved cleanliness of DexCache since having it as an object array was not the best solution.\n\nFixed a bug in InOrderWalk caused by ResolveType sometimes allocating classes.\n\nRename C++ Method to AbstractMethod and add two new classes Constructor, Method which both inherit from AbstractMethod.\n\nRename done to have the C++ code be closer to the java code.\n\nChange-Id: I4995b4c5e47a3822192b08afa24a639d3b1f4da9\n"
    },
    {
      "commit": "b726dcb581bf72da46527378ccb6889020f0e6e9",
      "tree": "c0383ed788652926e93147e50d659ed226519548",
      "parents": [
        "fd678beb171a4686a4f2d53ca4188a4ade8fa54e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 05 08:57:23 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 05 09:06:19 2012 -0700"
      },
      "message": "Rename GlobalSynchronization to Locks\n\nAlso address some review comments in common_throws relating to\nToStr\u003cInvokeType\u003e and exception detail messages.\n\nChange-Id: Ibf2c0f147689fa236d349bd7f01eed3c2522552b\n"
    },
    {
      "commit": "1b09b094a85e03f6ef5f687f58bb91c433273ba1",
      "tree": "6b039e520ee3b73e6ba5fb23954b9e01ecc68fc9",
      "parents": [
        "931c278aed62d7a97b87cf1bb9cfdd189e77eb24"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Aug 20 15:35:52 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Aug 20 15:35:52 2012 -0700"
      },
      "message": "Syntax clean up to make clang happy.\n\nChange-Id: I0984c395bbd1ee4b206eafd19915b6f68781dd16\n"
    },
    {
      "commit": "00f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abac",
      "tree": "6a2172ece15c4699e6c2a67ce76f019db0a9a21d",
      "parents": [
        "634ea28f78c4a138e6a1de54eae8696095422415"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 19 15:28:27 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 14 10:45:52 2012 -0700"
      },
      "message": "Global lock levels.\n\nIntroduce the notion of the mutators/GC being a shared-exclusive (aka\nreader-writer) lock. Introduce globally ordered locks, analysable by\nannotalysis, statically at compile time. Add locking attributes to\nmethods.\n\nMore subtly, remove the heap_lock_ and split between various locks that\nare held for smaller periods (where work doesn\u0027t get blocked). Remove\nbuggy Dalvik style thread transitions. Make GC use CMS in all cases when\nconcurrent is enabled. Fix bug where suspend counts rather than debug\nsuspend counts were sent to JDWP. Move the PathClassLoader to\nWellKnownClasses. In debugger refactor calls to send request and\npossibly suspend. Break apart different VmWait thread states. Move\nidentity hash code to a shared method.\n\nChange-Id: Icdbfc3ce3fcccd14341860ac7305d8e97b51f5c6\n"
    },
    {
      "commit": "026b14660723c2b25a4f3ef6394f43a4fe64ba92",
      "tree": "c896d6abf1e1c2bce7607ad41f491fe613da0e5e",
      "parents": [
        "bc2c29126c898a83eb0b90a51a8409fcffd899d8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 28 20:43:49 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 28 20:43:49 2012 -0700"
      },
      "message": "Fix build; JDWP::ObjectId feels like a pointer but is actually an int.\n\nChange-Id: I23460f0540115f5cc875f2da178bb99660de1262\n"
    },
    {
      "commit": "caf7654a0e6c76c7489970b1a246fccf220f9982",
      "tree": "bdf74befb18407a3cb5ec4bd406059314b0434a7",
      "parents": [
        "5d96a7168dd3e2a4acf1a947ef12efa8f82b95c0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 28 16:08:22 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 28 18:53:55 2012 -0700"
      },
      "message": "Fix posting exceptions when a debugger is attached, fix UpdateDebugger, fully implement ThreadGroupReference.Children.\n\nPosting exceptions and UpdateDebugger were broken by the recent stack-walking\nrewrite.\n\ndalvikvm never did ThreadGroupReference.Children correctly; it only admitted\nthat \"system\" is the parent of \"main\".\n\nChange-Id: I386f2fa5e01fba56cb2a1af4f136dbf31da0ff07\n"
    },
    {
      "commit": "6e9d22c78c1016e70f8c2a9e6bc66c94ec36f728",
      "tree": "eb9c2987d89c3217447dc5029725b20711a42f55",
      "parents": [
        "9c54f613f43bfb76ecb12006177b37222bdedc63"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 22 15:02:37 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 22 15:02:37 2012 -0700"
      },
      "message": "Fix JDWP stack frame regressions.\n\nThe bug was that Dbg::GetThisObject didn\u0027t take a thread argument, so\nalways used the calling thread, which is never the thread whose frames\nyou actually care about.\n\nI\u0027ve also made the JDWP ThreadReference.Frames get all the frames at once\nnow, since we no longer have fast random access to individual frames.\n\nChange-Id: I0ce2bd2088e11d5ea14f9785d7ca0e3890b3cb9b\n"
    },
    {
      "commit": "0399dde18753aa9bd2bd0d7cf60beef154d164a4",
      "tree": "ea88327c01ca321074aaa59b97e4c54348802937",
      "parents": [
        "de5705dcf4ab5f92d48e144bcd7b59f7bcd18e16"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 06 17:09:28 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 21 22:11:24 2012 -0700"
      },
      "message": "Remove Frame, merge shadow and quick representations.\n\nChange-Id: I5ae03a5e52111792d2df7e83cbd89ab25777844b\n"
    },
    {
      "commit": "546b986ecd09c2a498740bd8bf7127e612d94755",
      "tree": "ce2dfd24317d27929ae549202bc3bbe6ec282245",
      "parents": [
        "4d999fe696d43de5872f7be293e8a749cb69beaf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 20 16:06:13 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 20 16:06:13 2012 -0700"
      },
      "message": "Fix a couple of JDWP bugs.\n\nA couple of JDWP tests started failing when we made \"thread suspend\ncount is already zero\" into a fatal error. This patch makes the debugger\na bit more careful about doing silly things (the JDWP protocol defines\nthese silly things as no-ops, and it\u0027s surprisingly easy for an end\nuser to get us into this state; just sit typing \"resume\" at the jdb(1)\nprompt, for example).\n\nI\u0027ve also tidied up GetObjectTag to return an error on failure, but\nthat isn\u0027t the fix to any bug the tests find. (The only remaining JDWP\nbugs are all caused by an inability to cope with register promotion,\nand we\u0027re already working on the proper fix for that.)\n\nChange-Id: I671f62234b5cb41aa9d86c6b947c518d7c068800\n"
    },
    {
      "commit": "7b9d996e4cd7d154bb1a244d67139aff0c363cf2",
      "tree": "a9dabe8f910b4b8bf29c2f4285d860995e25f58d",
      "parents": [
        "934100aea5a0f498c17e2c4a1fd0193af1557b42"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 20 18:48:18 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 20 18:57:19 2012 -0700"
      },
      "message": "Tidy up some C-isms.\n\nChange-Id: I53b457cab9067369320457549071fc3e4c23c81b\n"
    },
    {
      "commit": "c0f0933249cf516b37717faa766e1e9808f7c1f8",
      "tree": "04aedbf3e8502637673b82cf181dfab1b5aca1a6",
      "parents": [
        "942df41c03ddb9f7b47a34fcfc4414d8b8ca8ce1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 26 13:27:06 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 26 13:27:06 2012 -0700"
      },
      "message": "Add the missing link between compiled code and the debugger.\n\nWhen a debugger connects and disconnects, we now let compiled code know that we\nneed to be kept informed about what\u0027s going on.\n\nAlso fix a threading bug when threads exit with a debugger attached.\n\nAlso some minor tidying, mostly involving naming.\n\nChange-Id: Iba0e8b9d192ac76ba1cd29a8b1e6d94f6f20dea8\n"
    },
    {
      "commit": "81ff3184e7eb8de4605c7646674ea4f9fa29b5f3",
      "tree": "eaf443fcc575d3a793af3ab3e435211981a1c1b1",
      "parents": [
        "5147733292cd0b80ca7da3099e43cc549d67526b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 23 20:35:56 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 26 08:38:34 2012 -0700"
      },
      "message": "Nomenclature improvements.\n\nChange-Id: I809ab04b6ee74bb8141791e1f3f5d7e3f4efb61c\n"
    },
    {
      "commit": "530fa005e2944d3b12712f80d974f0e753f568ef",
      "tree": "0a98404cd017ee5dc1c717039d5caad02fd38f18",
      "parents": [
        "4d26534f6a65d7af89cc32da8fbc32beed693201"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 12 11:44:49 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 12 11:44:49 2012 -0700"
      },
      "message": "Give WalkStack\u0027s callback a way to terminate early.\n\nAlso combine WalkStack and WalkStackUntilUpcall.\n\nChange-Id: Ida25665de72e5fd8e17946886a387b27cf841457\n"
    },
    {
      "commit": "0cf7433fd2a93b7f83e8b2ac91d0d1b4f0e7d0c9",
      "tree": "37246680f99ba51ec7d8f1a13c7e80cfe9b388c0",
      "parents": [
        "8be2d40d42223b515de12629216151a558895969"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 23 23:14:00 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 23 23:14:00 2012 -0800"
      },
      "message": "Fix the remaining GetValues/SetValues tests.\n\nAdd some missing checks and weaken some others. I\u0027d like to strengthen these up at some\npoint, but for now let\u0027s just pass the tests. The JDWP so-called specification is typically\nuseless about what should/shouldn\u0027t be allowed.\n\nChange-Id: Ia7390e0f18c4ac4a1697feac3d418767bdf7ebef\n"
    },
    {
      "commit": "45651fde99f52546e71241bb0e8a10d16a9f216a",
      "tree": "c796792c4b07027cfef0b519c4acafa307136257",
      "parents": [
        "3e2e1a2380e7b2ce402640ea4f6a177c06bd19a2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 15:48:20 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 15:48:20 2012 -0800"
      },
      "message": "Fix various debugger method invocation bugs.\n\n(Also fix DexFile to admit that string lengths are always non-negative.)\n\nChange-Id: I2d01ef2411b5c7e594527790daf3e0aaa3a1b67f\n"
    },
    {
      "commit": "3f4d58f4a39f60057ebf8ea92340ddb78317ae51",
      "tree": "39e0f6076b1eb5a0280b162f36bf5370b9f081dc",
      "parents": [
        "1a121b99fa8c5bf72cf58dcba4ecd5fd6dad417f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Feb 18 20:05:37 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Feb 18 20:05:37 2012 -0800"
      },
      "message": "More debugger robustness.\n\nThis fixes about half the remaining test failures, including almost all of the\nnative crashes.\n\nChange-Id: I9c3d994bfafaecca17597e442477c973e57f5979\n"
    },
    {
      "commit": "436e372e1c2b8e0bde47408e7407b4c3590f5071",
      "tree": "400ab4354ac9b1c67f2e94802f4d936e8739c163",
      "parents": [
        "2aa2e39548e194c5514d6534149ca1078021eab1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 17 20:01:47 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 17 20:01:47 2012 -0800"
      },
      "message": "Improve JDWP error handling.\n\nIn particular, we can\u0027t use NULL to mean \"invalid\"; some JDWP calls\nlegitimately need to handle NULL.\n\nChange-Id: Iec4fac5521994bdb1f59677bd5af153684d4e266\n"
    },
    {
      "commit": "2435a5751431152aaeaa2faaa86b2a30d3eecfe3",
      "tree": "ec5c4a2140364e6342aad6c02606dd8885d0d8be",
      "parents": [
        "dd6aa87f0484c6097df0657f242eeef9ac9ff9e8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 17 16:07:41 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 17 16:07:41 2012 -0800"
      },
      "message": "Support for single-stepping by line.\n\nPlus various other test fixes.\n\nChange-Id: I2ef923e56a16a14380eda150685b5e3db944616e\n"
    },
    {
      "commit": "c308a5d8c1993ff51be355531548e91409bdbd82",
      "tree": "0d0e88307b368d310be077363702c7b28b0a20f4",
      "parents": [
        "b6744c5a8a619501d89c0a137b61ca5b4ec93411"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 16 17:12:06 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 16 17:39:56 2012 -0800"
      },
      "message": "Fix a bug in Dbg::GetClassDescriptor.\n\nThe callers were incorrectly assuming we always returned a descriptor, which\nisn\u0027t true when handed bad input.\n\nChange-Id: I5509d18d8c234d97fa5ec2e0a01d4cdb44acfc55\n"
    },
    {
      "commit": "8696433d1b3d8ba15288483b777edd888de69135",
      "tree": "13ef61a98160430efae310c2e0fb322b1489ce68",
      "parents": [
        "83426160568b62b22a1f1559cace78b5152c7749"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 15 19:37:42 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 15 19:37:42 2012 -0800"
      },
      "message": "More JDWP functionality: breakpoints, single-stepping.\n\nBy-line still needs to be implemented. I\u0027ve also implemented\nVirtualMachine.Dispose so that it disconnects from the caller, as it\u0027s\nsupposed to. This was the cause of a lot of test hangs in otherwise\nsuccessful tests.\n\nI\u0027ve implemented ClassLoaderReference.VisibleClasses, though we don\u0027t have\nenough information to only return the classes for which the given ClassLoader\nwas an initiating class loader. We pass the tests with this, but mainly because\nthe tests aren\u0027t very thorough. Sadly, VirtualMachine.CapabilitiesNew doesn\u0027t\nlet us say we don\u0027t support this. (Though we could still just return\nERR_NOT_IMPLEMENTED...)\n\nChange-Id: I8d02c2b568a77a4c1725bc737a8ee844f4591e81\n"
    },
    {
      "commit": "91bf6cd47174f5c17265320f7a350722720390a5",
      "tree": "f4823c09793162e00b2fdd43990e12f2837d7562",
      "parents": [
        "f05d0dd011d3dbcf78bf35d0771f67371f5f6b58"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 14 17:27:48 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 14 17:27:48 2012 -0800"
      },
      "message": "More debugger support.\n\nThis wires up method-entry events and fixes a bug in exception events.\n\nChange-Id: Ia7c46786a8073434fbb4546615072622f301ef84\n"
    },
    {
      "commit": "1fe7afb88498d48d1f808ee31e986324f2a1c842",
      "tree": "08352a9caec6a5d26d5d47dfb7bd4543a2f22c39",
      "parents": [
        "cd1410aec0aff8b5cece062303311c20c23158fa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 17:23:03 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 18:32:19 2012 -0800"
      },
      "message": "Fix more JDWP bugs.\n\nChange-Id: I475d14e196a7463e70f7cce6a8b8d77f867e9e46\n"
    },
    {
      "commit": "3d1ca6de2ddf3d9e39755d629c896bfecd9640fd",
      "tree": "e44da249879ec6718d60f00b2333932f714711a3",
      "parents": [
        "d08547a802e6dbb71fde3ed3dac9aa0b03a5b17b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 15:43:19 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 15:43:19 2012 -0800"
      },
      "message": "Fix a bunch of JDWP bugs.\n\nMost of these were broken in dalvikvm too.\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d20856\nChange-Id: I88bc89e00a19edc21953cd4f42833f35bb5456a8\n"
    },
    {
      "commit": "ff17f1fd3ff32f93e45588eb2b158832d73f9afa",
      "tree": "deab04f6a2ad7f1dbaf0e6be266512d663e3dd91",
      "parents": [
        "a7679b67ca945194fa2442015e606cd250f0de2b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 24 18:12:29 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 24 18:12:29 2012 -0800"
      },
      "message": "Remove various bits of lint.\n\nChange-Id: I5f8f61766d2add7fd7ff40d463ea03cb20515988\n"
    },
    {
      "commit": "c3b77c7c2971124cbf3b2d9da64e7a8a9a649f2e",
      "tree": "b8f2b70fb281d2d8b617491755bcdb7f798af837",
      "parents": [
        "90040194a1b5c441dde5c8a8b6d637c23972e0f3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 15 20:56:48 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 16 14:17:50 2011 -0800"
      },
      "message": "Avoid copying and strlen(3) in the FindClass path.\n\nChange-Id: I789f3c883596d1852a2c1954ce7a207e6f937117\n"
    },
    {
      "commit": "7b3cdfcca472b779cf8745fb8460935e56229f11",
      "tree": "e74e88286c9f121ed1312faece45981ba4e0b14c",
      "parents": [
        "6f1dfe415019de95f0305de66b3afb40005fe382"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 08 21:28:17 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 08 21:45:49 2011 -0800"
      },
      "message": "More JDWP robustness.\n\nWe pass a lot more JDWP tests with this (fewer total failures than dalvik,\nbecause although dalvik implements more requests, it assumes that the debuggers\nonly send it valid input).\n\nI\u0027ve also added some of the missing constants (there are tests of modifier 12,\nSourceNameMatch, which was added in Java 6).\n\nChange-Id: I502e87b50fb305c5c8b061421339c8ceab104640\n"
    },
    {
      "commit": "3d30d9b09c16542d41554aad9f46ec9109ba5cb5",
      "tree": "fecce7ca0ea5e1fe0f5a03b917ab036a4a33b3b0",
      "parents": [
        "486013193c94b4321414c28ce9251911e14a0599"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 07 17:35:48 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 07 17:46:46 2011 -0800"
      },
      "message": "Fix detaching a debugger while threads are suspended.\n\nThe interesting part of this change is in \"thread_list.cc\".\n\nI\u0027ve done a TODO in TagFromClass, but haven\u0027t seen it make any practical\ndifference in a debugger. I also tightened up the types in GetThreadStatus\nwhile investigating the fact that we report some threads as \"RUNNING, SUSPENDED\",\nwhich makes no sense until you realize that TS_RUNNING corresponds to both\nour kRunnable thread state and our kNative thread state, the latter of which\nmay actually be a suspended thread.\n\nI\u0027ve also made us fail faster in the \"address in use\" jdwp failure case,\nand tidied up a bunch of the capitalization in logging.\n\nChange-Id: I0fe705791d07db31c4615addce44da4fdfbfd0d1\n"
    },
    {
      "commit": "d07986fad0d08cdf05505cf9230714a2cf0dd9ae",
      "tree": "731b6abf2c2e0a5e51453a80029e1a9073b12354",
      "parents": [
        "7fe2c691866ad643b9e21dd2c9d36fa79ec454c3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 06 18:27:45 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 07 09:16:24 2011 -0800"
      },
      "message": "Implement JDWP InvokeMethod and breakpoints on exception throwing.\n\nChange-Id: I1142bee843104f0850fd7270752104d5d73a44f0\n"
    },
    {
      "commit": "86b0010c79ef95b5333cd540b7d3af34a9f1a643",
      "tree": "d0285c356c0d7af5e412aa0bc19af04185dde9c1",
      "parents": [
        "cccd84f1f972f1a260c3be418c8388a5d30cf59e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 05 17:54:26 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 05 17:54:26 2011 -0800"
      },
      "message": "Implement JDWP StackFrame.ThisObject.\n\nI found a way to test this too.\n\nChange-Id: Ia9451c97d5b4269f63c6b8d75f145583db7dfff5\n"
    },
    {
      "commit": "cccd84f1f972f1a260c3be418c8388a5d30cf59e",
      "tree": "659537150070497c1afea72e67466619301f0bc3",
      "parents": [
        "3325596fbbcc9a0a93937976b5c128fd34851670"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 05 16:51:54 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 05 16:51:54 2011 -0800"
      },
      "message": "Implement local setting.\n\nI\u0027ve also worked out how to test CreateString and CreateObject, but\nnot CreateArrayObject yet.\n\nAlso stop saying \"cnt\".\n\nChange-Id: I26569ff6c4fa356fb91e6c22cbf8ced95094fabd\n"
    },
    {
      "commit": "6fa602d614d418f38afebb4d44f42e7dc0b4bd94",
      "tree": "90a8fcbead7ee9b5536916c9750c3889d5aebe3e",
      "parents": [
        "aed4be94da51b4fbb54c728151f0daf11535f6ab"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 02 17:54:25 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 02 17:54:25 2011 -0800"
      },
      "message": "Implement static field getting/setting, and basic Eclipse support.\n\nEclipse uses a few new calls that I hadn\u0027t seen from any of the other\ndebuggers.\n\nChange-Id: Iccb45f226431b6cd30a17f7b5ee8397e0838c1fc\n"
    },
    {
      "commit": "aed4be94da51b4fbb54c728151f0daf11535f6ab",
      "tree": "75b2d9b28862b1aa8529199964bf91a4b3df4c9d",
      "parents": [
        "f03b8f66511a2d8cb78d306f36feb51392232a5e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 02 16:16:23 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 02 16:16:23 2011 -0800"
      },
      "message": "Implement field getting and setting.\n\nThis lets you use \"dump\" and \"set \u003cobject\u003e.\u003cfield\u003e \u003d \u003cvalue\u003e\".\n\nChange-Id: I47aee563b26e04f4931ac1cf3de2cd2e38db35a7\n"
    },
    {
      "commit": "68fdbd07fc2b8856905e06f3cc945b046c3bfcd3",
      "tree": "b8982040e6a2fe250b3db127ea0b1dfdba552616",
      "parents": [
        "8aa6fc39f5cc0279d4ba2ee064de9758560dfedd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 19:22:47 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 30 12:11:23 2011 -0800"
      },
      "message": "Return values for locals, so \"locals\" can show them.\n\nAlso implement a couple of other JDWP commands so jdb can show the length\nof arrays and the value of strings.\n\nChange-Id: Ib2a4dc2ee784ee10bdb924e91b0150aa8a96845d\n"
    },
    {
      "commit": "dbb4079eb1e7d7738c81a97c8dd2550885c1093a",
      "tree": "733d5c08027ae65fb89132609d2aec9e6e2d747d",
      "parents": [
        "25e79a5e9ecd4bf30e0ea90a7dd4313f7f44bc3c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 18 17:05:22 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 18 17:47:00 2011 -0800"
      },
      "message": "Start implementing jdb \"locals\".\n\nThis lets us show the names and types of the locals, but all the values\nwill show up as 0/null. We\u0027re going to have to walk the whole stack and\ntake callee-save frames into account to do that right.\n\nChange-Id: Ic6e115513b6e65ae7ed4b7274e70bc514e83190a\n"
    },
    {
      "commit": "03181a828cd493545b278e0aa4f150fdaf1e3325",
      "tree": "eda89723d770a75c104170b6e1a09feb44053e3d",
      "parents": [
        "499c5133d361e7c659fc38e5ccfeb1280a7996f5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 17 17:22:21 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 17 17:41:59 2011 -0800"
      },
      "message": "Implement debugger support for getting thread stacks.\n\nYou can now \"where all\" in jdb.\n\nChange-Id: Iccff0427f39b2f2ab3786f05b89850d50b87adb2\n"
    },
    {
      "commit": "499c5133d361e7c659fc38e5ccfeb1280a7996f5",
      "tree": "1b7d865502e90b32483f3cf69f7b3217ea821e0f",
      "parents": [
        "a2e54f61453a2072181d5dd7aa2d5e845f5b53f6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 17 14:55:11 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 17 14:55:11 2011 -0800"
      },
      "message": "Implement debugger support for the \"threads\" command.\n\nChange-Id: I266d28ee00d87fdc7ecb179ddf52634db96e573c\n"
    },
    {
      "commit": "a2e54f61453a2072181d5dd7aa2d5e845f5b53f6",
      "tree": "4ca063dd40b4c246097aa31d4d79ddf14d0420a7",
      "parents": [
        "761928d24e4e7ed7776b52243eaf9095ad35f448"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 17 13:01:30 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 17 13:01:30 2011 -0800"
      },
      "message": "More debugger support.\n\nThis lets you attach jdb. Quitting will let your program run to completion.\nThis also fixes the \"class\", \"fields\", and \"methods\" commands.\n\nChange-Id: I6645f52dd8b5847454a553c31c80a2f5bf8f1000\n"
    },
    {
      "commit": "a215526d5c789cbef0f81a1f9aba22541a841cca",
      "tree": "4d6baa6e24d41027300bd22a7b7746267dd45f23",
      "parents": [
        "254db0ff7ea6509a1c2914b1d9532e2041a0c4c4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 16:26:58 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 16:56:41 2011 -0800"
      },
      "message": "Implement enough JDWP functionality that we can attach jdb.\n\nYou can also try \"classes\" and \"classpath\", though anything else\ndeadlocks because we\u0027re suspended but jdb thinks we aren\u0027t. I don\u0027t\nthink that\u0027s a new bug with this patch, though, so I\u0027ll look at that\nnext.\n\nChange-Id: I54456b6a7fe72642be696c66aa485dc0c8a7f913\n"
    },
    {
      "commit": "21f32d704a21bcd67d7b87b149b6314ff92946cb",
      "tree": "5546826bb2f700d88f3561c660b6e74eefc52b7d",
      "parents": [
        "545a064aca775ba801790fced3d713d8a87bfc61"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 09 17:44:13 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 09 18:21:37 2011 -0800"
      },
      "message": "Fix some DDMS stuff I\u0027d broken, and fix HexDump\u0027s double-spacing.\n\nChange-Id: I6583458a818406197744cc640b0993f73cfd5384\n"
    },
    {
      "commit": "545a064aca775ba801790fced3d713d8a87bfc61",
      "tree": "5c7aefe4e2ec7736f1fc8eea3b99a9df05bbae1c",
      "parents": [
        "3697d2459983c1f0a3d6efaefb2b6a1110af28df"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 08 19:10:03 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 09 15:58:49 2011 -0800"
      },
      "message": "Implement DDMS recent allocation tracking.\n\nChange-Id: I7cec7311ba496f93e147ae17fbce94d4d17b5269\n"
    },
    {
      "commit": "8218847294600bbfcdc041a46c2b579b6e70cf3b",
      "tree": "4beb913b0a0d3410fb1b6f9b690c63c7aefb53bd",
      "parents": [
        "6c9c06dbb0b16714079afaedbebd3d548aa832b2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 07 18:11:48 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 07 18:11:48 2011 -0800"
      },
      "message": "Implement thread name change notification for DDMS.\n\nChange-Id: If63d89991951989f27ee267895244e115661dce9\n"
    },
    {
      "commit": "6a5bd495ff2f614f1495f652c86f3902d3bde537",
      "tree": "421434975640d4ddc592ac3caba6198277f83369",
      "parents": [
        "e1fab56ffa50364fd08d4a935a2a3339f7faa509"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 28 14:33:57 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 28 15:30:08 2011 -0700"
      },
      "message": "Implement the DDMS heap walking (for native and managed heaps).\n\nThis gets you the DDMS histograms of what\u0027s on your heaps.\n\nChange-Id: I7133d044030b10a787277faf3a77e20c565e69c5\n"
    },
    {
      "commit": "7162ad937f5f6bec32bf78d4675ff65cd6d1a233",
      "tree": "78bd960316746977400a9fc1772fbedeb821faae",
      "parents": [
        "f7c3b6625d710a8700325eea447f65e9f963b7f2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 27 14:08:42 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 27 14:08:42 2011 -0700"
      },
      "message": "Implement DDMS heap info (\"HPIF\") chunks.\n\nThis lets you see how many bytes/objects are in your managed heap.\n\nChange-Id: Ie925207e9c48989a24968633e60b99314d220865\n"
    },
    {
      "commit": "767a147529da3ee8240f3ce4cd3af22ae454be64",
      "tree": "69901f2bd7721bb48f1379734908708f2eca96c8",
      "parents": [
        "39723d3bdd9532af903efeac8908391bb94a12ac"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 26 18:49:02 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 27 10:58:05 2011 -0700"
      },
      "message": "Wire in the DDMS heap stuff.\n\n(It\u0027s still UNIMPLEMENTED at the bottom, though.)\n\nChange-Id: I0f4c1c90cafb48b045685ae67300170fd696f386\n"
    },
    {
      "commit": "bfe487be25652c5456236661b9d9c3579d2296c1",
      "tree": "03e98cfc794946a85a5dfcc3170ae138f78da9b1",
      "parents": [
        "234ab15b00f8120282d1833e5d7480eca2e35a29"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 26 15:48:55 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 26 16:52:02 2011 -0700"
      },
      "message": "Makes objects known to the debugger GC roots, implements the THST message, and lets DDMS request stack traces.\n\nThis fills out correct data in all columns of the \"Threads\" table, and\ndouble-clicking on a thread shows that thread\u0027s stack.\n\nChange-Id: I48f63c3612e12d35269158dc3a283f07db28c8e7\n"
    },
    {
      "commit": "47fce01c0f27dba716fa6b97242562fbc5c26eea",
      "tree": "4a95d4bbc2a53ec765000e73cf026d404a667f73",
      "parents": [
        "ed6d78ed93c9b5b1988af6ca502a7e2eee0f2aaf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 18:37:19 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 18:37:19 2011 -0700"
      },
      "message": "Basic DDMS thread support.\n\nDDMS can now see our running threads...\n\nChange-Id: I42d2fce4db9eb846fa0b4aac46ca6bb3443a6c9f\n"
    },
    {
      "commit": "475fc23a4a7f35d1be87ea0b06c80df317a720ac",
      "tree": "91954099b3f4168a4bb97613219d1f5e329c1597",
      "parents": [
        "6ba581a6711c4fed24828c9a294b1b49ac6bbb30"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 15:00:35 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 15:00:35 2011 -0700"
      },
      "message": "More debugger support.\n\nThis gets us as far as the first DDMS-specific message, which means\nit\u0027s time to bring in a bunch more code.\n\nChange-Id: I3f9d75706d5ddde0aa21fcca558132282b94eff4\n"
    },
    {
      "commit": "d1cc8363d4f4bbac7568b1d02a5ca481cd10830f",
      "tree": "df0c401ed6d5e4e9153268c3f336ead459a84cfc",
      "parents": [
        "4ffd31315bc0d00ec278e85feed15985de5ac3dc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 24 16:58:50 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 24 16:58:50 2011 -0700"
      },
      "message": "Wire up enough of the pieces that we can connect ddms or jdb.\n\n(And die with an UNIMPLEMENTED as soon as they connect, of course.)\n\nChange-Id: I9abb25d581384361c215b3cd96b8278c751e79ea\n"
    },
    {
      "commit": "4ffd31315bc0d00ec278e85feed15985de5ac3dc",
      "tree": "9008b944618f4d422cb050d7d1c5aeb74fb39dd9",
      "parents": [
        "d81871cbbaa34c649e488f94f61a981db33123e5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 24 12:06:42 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 24 12:06:42 2011 -0700"
      },
      "message": "Implement the zygote debug options (late-enabling -Xcheck:jni and so on).\n\nChange-Id: I03772e7fb95fce1a19dac13f6c5f870164a4d874\n"
    },
    {
      "commit": "3bb81563481d02b5a6349b8ed918392454e761d8",
      "tree": "d409347516f215acba0ac7090a44e0b536cba100",
      "parents": [
        "4514d3c0e69a49f5dbe19138330a2bb2aee36d63"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 21 18:52:59 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 21 18:52:59 2011 -0700"
      },
      "message": "Basic JDWP option parsing...\n\n...and just enough code to silence all the UNIMPLEMENTED warnings you get\nduring normal usage.\n\nChange-Id: I56820ac971b88581c4cb1f462c13331d8fa04c43\n"
    },
    {
      "commit": "872d4ec7225444d9400d30f9027247deb91012fd",
      "tree": "f293f31987efc6b43ab64fe043390959dc59c816",
      "parents": [
        "8f903f2c1832a93d3b479d412664e0972cc14d6a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 21 17:07:15 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 21 17:51:01 2011 -0700"
      },
      "message": "Bring across the JDWP implementation.\n\nThis compiles and links, but does nothing until we fill out the 100 or so\nunimplemented methods in \"debugger.cc\". Note that I also need to add the\nextra command-line handling for the JDWP agent stuff, and add calls from\nthe runtime to the various \"something interesting is going on\" hooks.\n\nChange-Id: I477cf3caf9e248c384ce1d739cbfadb60e2008bc\n"
    }
  ]
}
