)]}'
{
  "log": [
    {
      "commit": "36dab3607e77505ce139eacef1c62a1c4bc4affd",
      "tree": "4b8fa4da5aef0bd4f7340d33f2d6649ba2089b5a",
      "parents": [
        "01a0ebb6b96c32879dcad99d515fc0cd8de2a266"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 30 14:59:56 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 30 17:03:32 2014 -0700"
      },
      "message": "Add support for bump pointer spaces to DdmSendHeapSegments.\n\nAdded support for bump pointer spaces as well as\ndifferentiating between DlMallocSpaces and RosAllocSpaces.\nAdded logic to reset the start of next chunk to prevent\ninbetween space regions counted as free.\n\nFixed a debug build bug where we were doing an mprotect after\ncreating a rosalloc space. In debug builds, this writes a magic\nvalue in the page. This was faulting since it was set to PROT_NONE.\nThe fix moves the mprotect before the RosAlloc space creation.\n\nBug: 16408851\nChange-Id: Ibe18198d05ff353fbb57d10b2f7719fdcbf1c5f0\n"
    },
    {
      "commit": "ca928ba8b9e109ced2b9d72622dc34bda63ac211",
      "tree": "c1049dcc9e94954d1e8aa6d00303fd638fbaee3a",
      "parents": [
        "3017527bf4ceced296b8885426b86ac939ab755f",
        "c901dd7bdc80b953d04100ef2f54b8d1ca5f466b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jul 24 07:24:12 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 23 19:30:00 2014 +0000"
      },
      "message": "Merge \"Fix access to long/double stack values from debugger\""
    },
    {
      "commit": "c62944adcd427dca55489d234428da47c43a0aab",
      "tree": "ee4e849af619400e351810bb68e4e82a523e56cf",
      "parents": [
        "719ca5ade262c5ace6a2ea32a3e4e48619d8439e",
        "799eb3a5555254427db269921042419bc30d4d86"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jul 21 18:01:22 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 21 15:45:37 2014 +0000"
      },
      "message": "Merge \"Add read barriers for the GC roots in Instrumentation.\""
    },
    {
      "commit": "799eb3a5555254427db269921042419bc30d4d86",
      "tree": "a1b96438b3eeef3776f03f893f2f234350e694e1",
      "parents": [
        "b12d6055432f6974317ca1b5c9260db0d410df3e"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jul 18 15:38:17 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jul 21 11:00:08 2014 -0700"
      },
      "message": "Add read barriers for the GC roots in Instrumentation.\n\nBug: 12687968\nChange-Id: I324e2f950ce4500b0e00722044af3a9c82487b23\n"
    },
    {
      "commit": "f3d874c60ee3ada19ce26a5c4e532312b6f3a9e9",
      "tree": "de14ab8b610f43a2c2c4c02f4ac67d614919fde2",
      "parents": [
        "031ddea20cb311dfdb3bd16a13750f9cb426b299"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 18:52:42 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 18:59:40 2014 -0700"
      },
      "message": "Avoid race in single thread suspension.\n\nDon\u0027t allow more than one concurrent single thread suspension to avoid\npotential cycles and deadlocks where threads try to suspend each other.\nBug: 16364458, 16354227\n\nChange-Id: I907f1d5591a6aa5c241d37d6b4a34f968f98df77\n"
    },
    {
      "commit": "c901dd7bdc80b953d04100ef2f54b8d1ca5f466b",
      "tree": "de52f83ac4dab4ca5b48cbc5a4701abdc762f2d1",
      "parents": [
        "81457a3cd8fca14396b5785a4e4c8070c259b07a"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jul 16 11:56:07 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jul 17 20:43:37 2014 +0200"
      },
      "message": "Fix access to long/double stack values from debugger\n\nLong and double values live in a pair of DEX registers. When we compile DEX\ncode with the Quick compiler, a DEX register either lives in the stack or is\npromoted to a physical register. In the case of a pair of DEX registers, the\nQuick compiler assumes both registers live in the same \"area\": both live in\nthe stack or both are promoted to physical registers.\n\nFrom the debugger, we used to access these values by reading/writing each DEX\nregister separately. However, this does not work when only one DEX register of\na pair is promoted and the other lives in the stack. In this case, the compiled\ncode reads from/writes to the stack only.\n\nTo fix that, the debugger must follow the same rule than the Quick compiler: if\nboth DEX registers are promoted, read/write them from/to physical registers,\notherwise read/write them from/to the stack. We add StackVisitor:GetVRegPair and\nStackVisitor:SetVRegPair for this purpose.\n\nWe also follow the same rule when deoptimizing. However we need to do that only\nwhen we know two consecutive DEX registers are part of a pair (long or double).\nWe know that thanks to the verifier.\n\nBug: 15527793\nChange-Id: I04812285ff26ef0129f39792a1cf776f3591ca2d\n"
    },
    {
      "commit": "22d5e735f403c57525fe868304c7123f0ce66399",
      "tree": "2458684efa56f0b800dd75a9dedd0449f76f581f",
      "parents": [
        "fbde4dd1cb6db729e3f3ee5bdae0cdd824d73054"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 22:23:51 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jul 16 06:13:46 2014 -0700"
      },
      "message": "Remove object_utils.h.\n\nBreak into object_lock, field_helper and method_helper.\nClean up header files following this.\nAlso tidy some of the Handle code in response to compiler errors when resolving\nthe changes in this CL.\n\nChange-Id: I73e63015a0f02a754d0866bfaf58208aebcaa295\n"
    },
    {
      "commit": "0f635b103c1fff6439d47bdae363afeffe7327fd",
      "tree": "afa160b8c3b850e5189a1bfa06065faee54eccaf",
      "parents": [
        "32710dd4a0232149002a5ae7bde1c640cdffd564",
        "bae182cbc6adc8796154162a87fc54ae804e0469"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jul 09 18:52:43 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 09 14:50:30 2014 +0000"
      },
      "message": "Merge \"Fix method tracing from command-line\""
    },
    {
      "commit": "bae182cbc6adc8796154162a87fc54ae804e0469",
      "tree": "d5c1fdb048edab194e948e4e90bff66703c5f55e",
      "parents": [
        "0c1734665c38b3116e38a90ad06c3f152d9316c5"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Dec 17 10:42:03 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jul 09 16:10:45 2014 +0200"
      },
      "message": "Fix method tracing from command-line\n\nTransitions current thread to the new kWaitingForMethodTracingStart thread\nstate when starting method tracing.\n\nEnsures there is a current thread when method tracing is stopped due to runtime\nshutdown. If the current thread has been detached, we now re-attach it.\nNote: we only do this if method tracing has been activated from command-line.\n\nFixes instrumentation when forcing interpreter mode (-Xint) with method tracing\nenabled.\n\nRemoves unused parameter from UnsafeLogFatalForThreadSuspendAllTimeout.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d72094\nBug: 11683397\nChange-Id: I70f000fb46ddd95d6ad51ea0a8eee77697a045e9\n"
    },
    {
      "commit": "0ec17d2ddb69d3f5c46ccad62e82c0ffd6219428",
      "tree": "a90ae1adaf549f474cc9d269f6ef5fe0062128d6",
      "parents": [
        "e8a30f37bf1530a80a7df17692dbe7a68764ac30"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jul 07 13:07:08 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Jul 08 11:23:34 2014 -0700"
      },
      "message": "Remove Dbg::VisitRoots().\n\nWe replace the GC strong roots with JNI.\n\njdwp_test passes.\n\nBug: 12687968\nChange-Id: I841f1aaa5dffa784ca25953a251600f70df273b2\n"
    },
    {
      "commit": "4345c46b8a927cf13d9bbe38f8cf0593f5de181b",
      "tree": "f89b8edfa245d16c6ceffa512233140f53cfd0c2",
      "parents": [
        "f55159c145e8b07be1dcafc949afda7e6a2f41c5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 27 10:20:14 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 08 09:42:03 2014 -0700"
      },
      "message": "Fix local reference leaks in debugger and use a cache.\n\nChanged alloc record stack trace element to use jmethodID instead of\nJNI weak global references. Added code to delete the local ref\ncreated in AllocRecord::SetType.\n\nBug: 15886342\nExternal bug: https://code.google.com/p/android/issues/detail?id\u003d72330\n\nChange-Id: Id18e765820baad02246768dc9d633aada60f4fed\n"
    },
    {
      "commit": "0bcb2902ec21393d71c94e63aa6733cb5311a0cc",
      "tree": "10beb60b5a8d212afdf0e7e58c5dfcbee691be2e",
      "parents": [
        "838b38fa3b2fb4a64f8a316459d372020f6e8feb"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 15:52:45 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 16:00:54 2014 +0200"
      },
      "message": "Revert \"Revert \"Fix access to FP registers when visiting stack\"\"\n\nThis reverts commit 8ebd94ab2e0d9867a7d384f00fa4cab24235216f.\n\nFixes StackVisitor::GetVReg to read register value in a uintptr_t local and\ncast it into uint32_t pointer argument.\n\nBug: 15433097\nChange-Id: I4e13ed5446e823e9ec50fbc378b16be5b17b2294\n"
    },
    {
      "commit": "a992a2820c70997d80bb46d09831a66a60827d17",
      "tree": "a0cdcb8b73078a861ba30062f87bbc80f33e0f6b",
      "parents": [
        "d87c29c7c5f04f643677d87cd202e90bda8fed02",
        "8ebd94ab2e0d9867a7d384f00fa4cab24235216f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 09:50:39 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 17 04:34:38 2014 +0000"
      },
      "message": "Merge \"Revert \"Fix access to FP registers when visiting stack\"\""
    },
    {
      "commit": "8ebd94ab2e0d9867a7d384f00fa4cab24235216f",
      "tree": "5fc48d8179f6ec6942ebada59bc88c4626608410",
      "parents": [
        "aa9b3aee1e06f922e4518713f9b3dff00a0b2597"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 09:49:21 2014 +0000"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 09:49:21 2014 +0000"
      },
      "message": "Revert \"Fix access to FP registers when visiting stack\"\n\nThis reverts commit aa9b3aee1e06f922e4518713f9b3dff00a0b2597.\n\nChange-Id: Ied27deb89cca5ec9094d391374e03f83fcb76c33\n"
    },
    {
      "commit": "aa9b3aee1e06f922e4518713f9b3dff00a0b2597",
      "tree": "992b4565732a728dd901ed8a2f29c9246de328b7",
      "parents": [
        "bc72903b909f5147b8cb207f3e5d02a8ef85e4e7"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jun 13 14:49:27 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 11:13:03 2014 +0200"
      },
      "message": "Fix access to FP registers when visiting stack\n\nAdds GetFPR and SetFPR to Context class so we can read from and write to\nfloating-point registers during stack visit. They return a boolean flag\nindicating whether the read/write is successful. This allows the debugger to\nreturn the JDWP error ABSENT_INFORMATION when we can\u0027t read/write a register.\nWe also update GetGPR and SetGPR for consistency. We keep a default GetGPR\nimplementation asserting the read was successful using a CHECK so we don\u0027t\nsilently fail.\n\nAdds missing JDWP object tags for StackFrame.SetValues to avoid crash when\nsetting corresponding objects (thread, thread group, class object or class\nloader). Also returns JDWP error INVALID_OBJECT (when the given object id is\ninvalid) instead of crashing with an unimplemented message.\n\nBug: 15433097\nChange-Id: I70843c9280e694aec1eae5cf6f2dc155cb9ea10e\n"
    },
    {
      "commit": "988bbed8d3b3239f69d548aaf05580cdde3349d2",
      "tree": "9746de0cf1099dd322066b983aae3ed6d521667d",
      "parents": [
        "4b855675b7c77e265aa69a9134dd50cc21273095",
        "aa9b3aee1e06f922e4518713f9b3dff00a0b2597"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 09:22:17 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 17 04:40:41 2014 +0000"
      },
      "message": "Merge \"Fix access to FP registers when visiting stack\""
    },
    {
      "commit": "cc8c5c5433230818cfe31617308198f286cc2ee1",
      "tree": "6fc1b452e6b4b144882bd1e25de428db5d2ccec0",
      "parents": [
        "08eeb38bb95dbb41dbdb0ea023749889b126af61"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jun 13 15:08:05 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jun 13 15:14:07 2014 -0700"
      },
      "message": "Avoid a non-root monitor vector in Dbg::GetOwnedMonitors().\n\nFollowing up on CL 96571, remove the need to use stack-scoped vectors,\none of which is a non-root vector that holds Object*, which could\ncause a GC bug.\n\nBug: 12687968\nChange-Id: I8582fe6bfe71bae7018dbf844fe75ebe989b6535\n"
    },
    {
      "commit": "b5a9e3d1cc1fd66683e43e365afc8c900e2800c4",
      "tree": "5b259807b4c5c67c532050939458a8390234a7a0",
      "parents": [
        "3b95d23f44485d207aa6ef298dc744fa2355578b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jun 09 12:11:20 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Jun 11 14:46:13 2014 -0700"
      },
      "message": "Remove Object* weak roots from the debugger.\n\nThe weak roots were converted to JNI weak refs.\n\nSince the weak roots are now normal JNI weak refs, we eliminate the\nneed to insert read barriers for those weak roots in the debugger and\nthe need for the GC to have a separate step to update them as part of\nthe system weak sweeping.\n\nBug: 12687968\nChange-Id: If16396d4713457b8af4f1ea6a0c6ec6799cb615e\n"
    },
    {
      "commit": "9f1020305292a21fd14a402b189c765a125226ab",
      "tree": "6b730cbe56ded370d1b4293629826ad2c7b06f7f",
      "parents": [
        "bc72903b909f5147b8cb207f3e5d02a8ef85e4e7"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri May 23 08:59:42 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 11 14:29:00 2014 +0200"
      },
      "message": "Fix exception reporting from interpreter\n\nTo comply with JDWP exception report rules, we must report an exception at the\nlocation of the throw (or the first instruction encountered after a native\ncall). To do this, we use the CatchLocationFinder visitor to look for a catch\nhandler until we reach a native frame or the top frame.\n\nBecause interpreter handles pending exception on a method-by-method basis, we\nneed a flag to remember we already reported the exception and avoid reporting\nit multiple times when unwinding methods. The drawback is we need to maintain\nthe state of this flag. We clear it when the exception is cleared. In the case\nwe temporarily clear the exception (when finding a catch handler for instance),\nwe restore the flag to its previous value at the same time we restore the\npending exception.\n\nBump oat version to force recompilation because we modify Thread offsets.\n\nBug: 14402770\nChange-Id: Ic059c58f80b2023b118038301f8f0a24f1e18241\n"
    },
    {
      "commit": "bfd9a4378eacaf2dc2bbe05ad48c5164fc93c9fe",
      "tree": "3d3f667c8232a9c1bb6fe9daea0d364f9ae01d8c",
      "parents": [
        "2e1ca953c7fb165da36cc26ea74d3045d7e272c8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 21 17:43:44 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 09 12:46:32 2014 -0700"
      },
      "message": "Change MethodHelper to use a Handle.\n\nAdded ConstHandle to help prevent errors where you modify the value\nstored in the handle of the caller. Also fixed compaction bugs\nrelated to not knowing MethodHelper::GetReturnType can resolve types.\nThis bug was present in interpreter RETURN_OBJECT.\n\nBug: 13077697\n\nChange-Id: I71f964d4d810ab4debda1a09bc968af8f3c874a3\n"
    },
    {
      "commit": "4479ba35389b03ccc9eabd17fba6168f9505517a",
      "tree": "fb8091b4637b27d8a9d3d4f390b79263a12d9881",
      "parents": [
        "081203e06534e4aa27a942e47084289eecab29ed",
        "61c5ebc6aee2cac1c363de6fbdac25ada1697fdb"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 06 23:37:27 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 06 23:37:27 2014 +0000"
      },
      "message": "Merge \"Change FieldHelper to use a handle.\""
    },
    {
      "commit": "61c5ebc6aee2cac1c363de6fbdac25ada1697fdb",
      "tree": "444936c3e3718b692ba7f1981b863190f26b4ed7",
      "parents": [
        "25c4f6a25b3de9b9d7ca5162f1629753a0b7f003"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 05 17:42:53 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 06 13:12:17 2014 -0700"
      },
      "message": "Change FieldHelper to use a handle.\n\nFixed compaction bugs related to FieldHelper::GetType in:\nartSet32InstanceFromCode\nSetFieldValueImpl\nCheckReceiver\nField_set\ninterpreter::DoFieldPut\nMethodVerifier::VerifyISGet\nMethodVerifier::VerifyISPut\nMethodVerifier::VerifyIGetQuick\n\nBug: 13077697\n\nChange-Id: I7de9ded2893b5568d43e4daa86fd135bf5508b72\n"
    },
    {
      "commit": "4206eb5d86d3a2406361e59b2018152b2485cced",
      "tree": "a83b9f33af46af127dc0c2b781b2b2d505f27502",
      "parents": [
        "fbc3e0baa16f265a5dbc99a38383b4dbc41b04a8"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jun 05 10:15:45 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jun 05 11:36:46 2014 +0200"
      },
      "message": "Fix crash in JDWP ReferenceType.SourceFile command\n\nUpdates Dbg::GetSourceFile to return ABSENT_INFORMATION error code when\nClass::GetSourceFile returns nullptr. This happens if the class has no source\nfile information.\n\nUpdates Class:GetSourceFile to return nullptr for classes which have no\nClassDef item like generated classes. This allows to remove the IsProxyClass\ntest from Dbg::GetSourceFile. Adds this test in proxy_test.\n\nBug: 15426710\nChange-Id: I019da4ced83778d5264484c43b225f8b5c95632e\n"
    },
    {
      "commit": "46960fe5dcc1be07b39a55114338423a73554449",
      "tree": "fb31a1fc7dc07abe3d87a26f8fd394e9f7193304",
      "parents": [
        "567e9dbc65ee183cda2a052dbf224c8c4a8f9423"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 23 10:43:43 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 23 10:43:43 2014 -0700"
      },
      "message": "Make the specification of when we need precise constants more precise.\n\nMeans that oatdump output showing values for deoptimization actually reflects\nwhat we see at runtime.\nAlso, doesn\u0027t do precise in the case of determining methods and fields for the\nquickened case, which may be an occasional performance win.\n\nChange-Id: I62c7fb244f7996ba9d52e7a7ce75c046b663fa17\n"
    },
    {
      "commit": "c4ddc042eaf5232a3f9b111f42af39eeab6e0294",
      "tree": "99d5e9525a23d8004b847e6a11de43238a2c1729",
      "parents": [
        "88ce52a525cc4e163c7005821c36308d9a097926"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue May 13 14:47:50 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 22 14:38:28 2014 -0700"
      },
      "message": "Add support for jemalloc instead of dlmalloc.\n\nBug: 981363\nChange-Id: I226ce3249c0d982eb1a9fdb9d04b25737f77345d\n"
    },
    {
      "commit": "700a402244a1a423da4f3ba8032459f4b65fa18f",
      "tree": "4c22fcda04d271bd55a37aff30650214af17a90c",
      "parents": [
        "047c11adcbcbc0bcf210defdfcbada763961ffee"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 16:49:03 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 22:27:39 2014 -0700"
      },
      "message": "Now we have a proper C++ library, use std::unique_ptr.\n\nAlso remove the Android.libcxx.mk and other bits of stlport compatibility\nmechanics.\n\nChange-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61\n"
    },
    {
      "commit": "f832284dd847ff077577bb5712225430bbbb3b67",
      "tree": "44f6b91098639c6ebc438b4ec998d0dc128cef9a",
      "parents": [
        "8f0776768712b2021aa8fb649b51017b9f0fc7a9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 16 10:59:25 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun May 18 12:50:33 2014 -0700"
      },
      "message": "Delete ClassHelper and fix compaction bug in GetDirectInterface\n\nCleanup helps to prevent compaction bugs. Fixed a fairly serious\ncompaction error caused by calling ClassHelper::GetDirectInterface\nwithout handling the case where it causes thread suspension due to\nResolveType.\n\nBug: 8981901\n\nChange-Id: I82b3bb6dd48d21eb6ece7aae0733c4a23c2bc408\n"
    },
    {
      "commit": "e713d9338ad122d6b8c7997387d0c9fc464eea3e",
      "tree": "17b3ef199c2cf4b23bb5df4084e95594cac94dab",
      "parents": [
        "4c6491ff7b37d984622c2380300f2c244b26e7d7"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 15 10:48:53 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 15 17:20:06 2014 +0200"
      },
      "message": "Fix JDWP location event report on return instructions\n\nAfter change https://android-review.googlesource.com/94334, the debugger may\nlisten to kDexPcChange event without listening for kMethodExit event. In this\ncase, we need to report kDexPcChange event on RETURN instructions.\n\nBug: 11874828\nChange-Id: Ic61f4eec71e7ece494bee628d7f3358a616d31d3\n"
    },
    {
      "commit": "7d2ae437a87ceb2bdda098ab11f4da588c6a75f5",
      "tree": "dfe7cea3baf8dc650dda8a41ae3f9140e47106d0",
      "parents": [
        "cdf05ab175c64adb49eb97d6dd35e885bbcad072"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 15 11:26:34 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 15 11:26:57 2014 +0200"
      },
      "message": "Fix build\n\nFix format error.\n\nChange-Id: Ic793c52f46d645bf88ea6b28d5b4fa1bdb315a20\n"
    },
    {
      "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": "3b9097d502fbe47ec897db3ab64f70b5e0d309c9",
      "tree": "11dffdbce19d9afe55dd6a39976253d1750c7f99",
      "parents": [
        "be02a596e16d99d74a5d906f67be923d4df79bee",
        "8379b2256be5d2be4ad083a76e9f8ec403c4d405"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 15 06:56:11 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 15 06:56:13 2014 +0000"
      },
      "message": "Merge \"Combine JDWP location events\""
    },
    {
      "commit": "eb8167a4f4d27fce0530f6724ab8032610cd146b",
      "tree": "bcfeaf13ad78f2dd68466bbd0e20c71944f7e854",
      "parents": [
        "6fb66a2bc4e1c0b7931101153e58714991237af7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 07 15:43:14 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 13 14:45:54 2014 -0700"
      },
      "message": "Add Handle/HandleScope and delete SirtRef.\n\nDelete SirtRef and replaced it with Handle. Handles are value types\nwhich wrap around StackReference*.\n\nRenamed StackIndirectReferenceTable to HandleScope.\n\nAdded a scoped handle wrapper which wraps around an Object** and\nrestores it in its destructor.\n\nRenamed Handle::get -\u003e Get.\n\nBug: 8473721\n\nChange-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a\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": "4d466a8e4587422c989705dce3b2a19e7f0137f5",
      "tree": "bd8f0f45db9a7d5888b14a070690f59fb599bd68",
      "parents": [
        "f1c036fc8fa97617cc42bda44a0adbc7b856d6cd"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu May 08 19:05:29 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri May 09 12:23:00 2014 -0700"
      },
      "message": "Remove all LOG(DEBUG) which is not intended to be checked in\n\nBug: 14632493\nChange-Id: Id9da8b87798af0a1b2bd2c178133e5f1ba47d43d\n"
    },
    {
      "commit": "b0fa5dc7769c1e054032f39de0a3f6d6dd06f8cf",
      "tree": "839d13ebfa7170967dd9b4abd434b7abda53da99",
      "parents": [
        "948740c1938860df055ddc801f20fd1707331e38"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Apr 28 16:47:08 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Apr 29 14:36:28 2014 -0700"
      },
      "message": "Force inlining on trivial accessors.\n\nMake volatility for GetFieldObject a template parameter.\nMove some trivial mirror::String routines to a -inl.h.\n\nBug: 14285442\n\nChange-Id: Ie23b11d4f18cb15a62c3bbb42837a8aaf6b68f92\n"
    },
    {
      "commit": "280286ac8a0e3a30c68be511c8b7a0a4d62936d7",
      "tree": "3a7832ca536700a238b79cf5e1a8bb2ebced9277",
      "parents": [
        "d55e9b1a9f45c19cd7b376a8839ce37f86c66a64"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 28 09:26:50 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 29 09:41:52 2014 +0200"
      },
      "message": "Fix DDM recent allocations\n\nA class may not have source file in which case ClassHelper::GetSourceFile\nreturns NULL. Adding the GetMethodSourceFile function helps us preventing\nfrom dealing with null strings.\n\nBug: 14300208\nChange-Id: I28707f883bacec4ee367ff703328d0f0240855f9\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": "1d66e88ea74f7d85f75db7f145fe955d5f0f6872",
      "tree": "715cee13931192549a592a7dac91235c0a1d77c0",
      "parents": [
        "b70b09f6cc1f1fbbf604da7b6b1ea5f74e43571c"
      ],
      "author": {
        "name": "nikolay serdjuk",
        "email": "nikolay.y.serdjuk@intel.com",
        "time": "Mon Apr 07 13:54:24 2014 +0700"
      },
      "committer": {
        "name": "nikolay serdjuk",
        "email": "nikolay.y.serdjuk@intel.com",
        "time": "Mon Apr 07 13:54:24 2014 +0700"
      },
      "message": "JDWP request is parsed incorrectly due to junk in the descriptor\n\nThe ClassHelper object is created and deleted on the same line.\nTherefore it is wrong to refer to any class members of the object in\nthe next line. Any references to the object and the object itself\nmust have the same live ranges.\n\nChange-Id: I792d7baa3828b0389254f2941705e006cab092cd\nSigned-off-by: nikolay serdjuk \u003cnikolay.y.serdjuk@intel.com\u003e\n"
    },
    {
      "commit": "dd7624d2b9e599d57762d12031b10b89defc9807",
      "tree": "c972296737f992a84b1552561f823991d28403f0",
      "parents": [
        "8464a64a50190c06e95015a932eda9511fa6473d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Mar 14 17:43:00 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Apr 01 08:24:16 2014 -0700"
      },
      "message": "Allow mixing of thread offsets between 32 and 64bit architectures.\n\nBegin a more full implementation x86-64 REX prefixes.\nDoesn\u0027t implement 64bit thread offset support for the JNI compiler.\n\nChange-Id: If9af2f08a1833c21ddb4b4077f9b03add1a05147\n"
    },
    {
      "commit": "6c90df9d49b29bddc1e3d27ff2698ae1df89d517",
      "tree": "1a16923b1d323dc1a6ff2d115a0a4a9029c48a4a",
      "parents": [
        "e18b027344e521e1b374d967948c7dd55cc02c8a",
        "4d8fd49509fdcf203107fb33c62d8f451b6eb1d0"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 01 09:07:49 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 01 09:07:50 2014 +0000"
      },
      "message": "Merge \"Return correct JDWP type tag for array class\""
    },
    {
      "commit": "4d8fd49509fdcf203107fb33c62d8f451b6eb1d0",
      "tree": "cfb6cd9417159ba197b2f7dae0c9cc03a8eb7c94",
      "parents": [
        "a708e32a9f764a48175e705ec4bcd2201c84f492"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Mar 28 16:29:41 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Mar 31 11:14:40 2014 +0200"
      },
      "message": "Return correct JDWP type tag for array class\n\nUses GetTypeTag function to get JDWP type tag for a class. This fixes the\nreturned type tag in ClassObjectReference.ReflectedType command.\n\nBug: 13689172\nChange-Id: Ibb9006eb604d84cfb8e279eaeed1982a136d6510\n"
    },
    {
      "commit": "1cd53dbb2163f18b689d2a65cf9c6bdcdb01b407",
      "tree": "b6a214bcc7bd33cfa60e0e7ee51329b3327a537a",
      "parents": [
        "0fd52d5d0cf01e5a109851098a43a79f5615dc0f"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Mar 28 15:26:48 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Mar 28 15:26:48 2014 -0700"
      },
      "message": "Fix a DCHECK failure when causing GC from DDMS.\n\nBug: 13647069\nChange-Id: Iae2746b2b7b4493fcf5f0d40d2bf36a9b2d2efc8\n"
    },
    {
      "commit": "a76a6d4cb3dedec909bd927f20bc0ab23198a337",
      "tree": "34ceb525611dde3413cdcab4a3ab8ced3b131fc9",
      "parents": [
        "78bd9b2198f0ccc48036c1517b2d9a9023157dfb"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 20 16:40:17 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 27 16:22:09 2014 +0100"
      },
      "message": "Support inlining with breakpoint\n\nWhen installing/uninstalling a breakpoint in a method, we fully or selectively\ndeoptimize/undeoptimize depending on whether the method can be inlined. When\nthe method can be inlined, it requires full deoptimization. Otherwise, it only\nrequires selective deoptimization.\n\nWe add sanity check to control we are in a consistent state each time we add or\nremove a breakpoint. We also add some comments to better describe the process\nof deoptimization for breakpoint.\n\nBug: 12187616\nChange-Id: Id15adc6e5e2fe783c83c925cbcd19ae02431b7e0\n"
    },
    {
      "commit": "78bd9b2198f0ccc48036c1517b2d9a9023157dfb",
      "tree": "dd08a821ee89dfea00f730ffa41ccd8c45295622",
      "parents": [
        "03fd6e179d3bcd7f1a67a0b5de71b756f1637ec6",
        "4d25df3f76f864b7629ac8c0046d46997f293d8d"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 27 07:46:58 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 27 07:46:58 2014 +0000"
      },
      "message": "Merge \"Refactor deoptimization support in debugger\""
    },
    {
      "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": "b98063a4d54c5a741152a1eebc262d8e223b3b25",
      "tree": "4a5b3bf342db4a28ead0772746017566a6eab723",
      "parents": [
        "909f133bc938928a2403baccc983701cb9ebb17f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Mar 26 10:57:20 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Mar 26 11:05:11 2014 +0100"
      },
      "message": "Fix alloc tracker locking issue\n\nFixes a lock level violation where we attempt to take the thread list lock\nwhile already holding the alloc tracker lock. We now avoid holding the alloc\ntracker lock when updating allocation entrypoints.\n\nBug: 13646642\nChange-Id: Iab505dae67d0c754031fe30d50a7cbd5e4ba5785\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": "77bef430373a56f7dd9ba99ab8471bf5f571253a",
      "tree": "02c59b09bbec56227ffc18811f1d5b8814dfea4f",
      "parents": [
        "c5db77cce4138ac1f473872a06d230d876374337",
        "83a47d8a950867da833dfb5c3d8ddfb3d87a8cfe"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 20 10:22:36 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 20 10:22:37 2014 +0000"
      },
      "message": "Merge \"Fix JDWP ObjectReference.InvokeMethod for virtual method call.\""
    },
    {
      "commit": "83a47d8a950867da833dfb5c3d8ddfb3d87a8cfe",
      "tree": "4d5699876abc9abbed3b89725fd6e97061de1e9e",
      "parents": [
        "0d9c02e661813abdf18b4e7544e204d2da719d20"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 20 09:57:40 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 20 09:57:40 2014 +0100"
      },
      "message": "Fix JDWP ObjectReference.InvokeMethod for virtual method call.\n\nFixes virtual method call by invoking the concrete method in sirt reference\nafter devirtualization, not the original method.\n\nBug: 13526099\nChange-Id: I2e3548eca2f5434e8cece64c22aaf80d1cd8badf\n"
    },
    {
      "commit": "5426324ea7a4c334cde1fdc4b8aae39f8a8e362d",
      "tree": "a3547599de816989a9f4a8937203d1b618b0d97c",
      "parents": [
        "0d9c02e661813abdf18b4e7544e204d2da719d20"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Mar 19 18:16:50 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Mar 19 18:17:32 2014 +0100"
      },
      "message": "Fix thread suspension in ObjectReference.MonitorInfo JDWP command.\n\nUses ThreadList::SuspendAll and ThreadList::ResumeAll to suspend/resume all\nthe threads so we collect monitor info while all threads are suspended.\n\nBug: 13528439\nChange-Id: I81ad0698a759cae428aa6a0149dafda3db4cd198\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": "53b8b09fc80329539585dcf43657bc5f4ecefdff",
      "tree": "cac0f82fbb89bd907104e3fed6c36203e11a3de0",
      "parents": [
        "0dea9872082bc3e576ed6cefed86b0d6c0c45ffd"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 13 23:45:53 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Mar 14 11:28:10 2014 -0700"
      },
      "message": "Refactor reflective method invocation.\n\nMove invocation code out of JNI internal into reflection, including ArgArray\ncode. Make reflective invocation use the ArgArray to build arguments rather\nthan allocating a jvalue[] and unboxing arguments into that.\nMove reflection part of jni_internal_test into reflection_test.\nMake greater use of fast JNI.\n\nChange-Id: Ib381372df5f9a83679e30e7275de24fa0e6b1057\n"
    },
    {
      "commit": "3314dcf81d116c3142520970286ffaede67ab522",
      "tree": "424291dddb6c7c3458c33771b6f979035a8e60c4",
      "parents": [
        "cd4f41a667b5eee6b12ec1cbec1912024b3b122e",
        "b7054baf28d4d652fbd98a94b089344a31898d53"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 13 16:16:13 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 13 16:16:14 2014 +0000"
      },
      "message": "Merge \"Fix debugger crashes in presence of proxy objects.\""
    },
    {
      "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": "b7054baf28d4d652fbd98a94b089344a31898d53",
      "tree": "54d2548fab1faa859d6e610d03881e71074b1cb7",
      "parents": [
        "37d4c1db4d705f5a28001f65afdd68d0527948d8"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 13 11:52:31 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 13 15:11:19 2014 +0100"
      },
      "message": "Fix debugger crashes in presence of proxy objects.\n\nFix ClassHelper::NumDirectInterfaces to use IfTable::Count instead of the\niftable array\u0027s length (which is twice the interface count). This happens when\nprocessing ReferenceType::Interfaces command and was causing a crash.\n\nReturn ABSENT_INFORMATION error code when we\u0027re asked for the source file of a\nproxy class. Otherwise we call ClassHelper::GetSourceFile which expect the\nclass has a corresponding ClassDef item in the DEX file which is not true for\nproxy classes.\n\nAdd new proxy_test to check ClassHelper works correctly with proxy classes.\n\nBug: 13426918\nChange-Id: I5c1212b1a697dd7dc1ab18e99552ee113c533a5a\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": "6fac447555dc94a935b78198479cce645c837b89",
      "tree": "bcf1449999084b1e1dec3dac287f6f3670d7eda0",
      "parents": [
        "7f0ff7e7fff82566bca5f9353eaa2c4f81f0671a"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 25 17:01:10 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 26 16:38:22 2014 -0800"
      },
      "message": "Make allocations report usable size.\n\nWork-in-progress to allow arrays to fill usable size. Bug: 13028925.\nUse C++11\u0027s override keyword on GCC \u003e\u003d 2.7 to ensure that we override GC and\nallocator methods.\nMove initial mirror::Class set up into a Functor so that all allocated objects\nhave non-zero sizes. Use this property to assert that all objects are never\nlarger than their usable size.\nOther bits of GC related clean-up, missing initialization, missing use of\nconst, hot methods in .cc files, \"unimplemented\" functions that fail at\nruntime in header files, reducing header file includes, move valgrind\u0027s space\ninto its own files, reduce number of array allocation routines.\n\nChange-Id: Id5760041a2d7f94dcaf17ec760f6095ec75dadaa\n"
    },
    {
      "commit": "aaea7343831b64f4351c9abc7493ec062adfaf53",
      "tree": "9ace06bf09aecdce840d590d9673880461287bdf",
      "parents": [
        "bdbc11899d04b284c0ec4b055e1a009c7034aaa5"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Feb 25 15:10:04 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Feb 25 18:06:04 2014 +0100"
      },
      "message": "Fix debugger disconnection crash.\n\nFixes a check failure where we uninstall instrumentation while we did not\ninstall it before. This happens when the JDWP thread stops with no debugger\nconnected.\n\nBug: 13168905\nChange-Id: I83766ced79721747e5a7aaf27ce01a853ad55f03\n"
    },
    {
      "commit": "9837939678bb5dcba178e5fb00ed59b5d14c8d9b",
      "tree": "00f0e6b54d7c4cac78a02752e268724157e50b6e",
      "parents": [
        "3fcf18e25241253f23efbeebe77b2a4c4a7c54d3"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 24 16:53:16 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 24 18:47:23 2014 -0800"
      },
      "message": "Avoid std::string allocations for finding an array class.\n\nIntroduce ClassLinker::FindArrayClass which performs an array class lookup\ngiven the element/component class. This has a 16 element cache of recently\nlooked up arrays.\nPass the current thread to ClassLinker Find .. Class routines to avoid calls\nto Thread::Current().\nAvoid some uses of FindClass in the debugger where WellKnownClasses is a\nfaster and more compacting GC friendly alternative.\n\nChange-Id: I60e231820b349543a7edb3ceb9cf1ce92db3c843\n"
    },
    {
      "commit": "11d40c250ec86c784cf76b8c31e1cf9285d555dc",
      "tree": "a0c03a28963cf6683b3832cf4548b4bf8961b912",
      "parents": [
        "3188d117d6f1ba5f3a30d0ff231d816ebb59a7f7"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Feb 19 18:00:17 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 20 15:23:01 2014 +0100"
      },
      "message": "Fix deoptimization deadlock\n\nFixes a deadlock occuring during undeoptimization on debugging session end.\n\nBefore disconnecting debugger, we must unregister all requested events. We take\nthe event list lock to browse all these events. Some of them (as METHOD_EXIT)\nmay have activated deoptimization so we need to undeoptimize. During this\nprocess, we restore all original entrypoints of every method in the stack and\nnotify method exit events to the instrumentation listener (see method\nInstrumentationLister::MethodExited). In our case, the instrumentation listener\nis the debugger. It takes the event list lock (to browse the event list and see\nif this event must be posted) but hangs waiting for it. Since it\u0027s already\nholding the event list lock (which is not recursive), it ends up in a deadlock\nsituation.\n\nThis CL fixes the way we prevent from posting method enter/exit events during\nthe process of deoptimization/undeoptimization. We now explicitly set a flag\nindicating if deoptimization is enabled (by the debugger).\n\nAlso removes unused field in InstallStackVisitor class and remove debugger as\nlistener before disabling deoptimization to ensure it does not receive any\nevent when disconnecting.\n\nChange-Id: I49a2ae43e86cf29094f4b462bfa754d7740d3e97\n"
    },
    {
      "commit": "3c95c591e054ecd2eac40a4d25668f239782aabd",
      "tree": "6f3389c0826ee3beafe8b20d0faf0d40d928b2d6",
      "parents": [
        "e7da4cf71712a3d7a64166ceadfb176d07018d32",
        "de34eea060edb4eb34d6ecd840e6e1c4c6489642"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 20 10:10:04 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 20 10:10:05 2014 +0000"
      },
      "message": "Merge \"Do not set ACC_SUPER flag for interfaces\""
    },
    {
      "commit": "de34eea060edb4eb34d6ecd840e6e1c4c6489642",
      "tree": "a15298c69afc2814186973ee46b6faea8d271a7a",
      "parents": [
        "209a3a03595984a7a94103c3c6ba8c5afaf358a1"
      ],
      "author": {
        "name": "Yevgeny Rouban",
        "email": "yevgeny.y.rouban@intel.com",
        "time": "Sat Feb 15 01:06:03 2014 +0700"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 20 10:42:40 2014 +0100"
      },
      "message": "Do not set ACC_SUPER flag for interfaces\n\nThe debugger\u0027s GetModifier method forces the ACC_SUPER flag set for all\nclasses and interfaces because dex files don\u0027t contain this flag.\nBut according to the JVM Spec (Class File Structure) the ACC_SUPER flag\nmust not be set for interfaces:\n   If the ACC_INTERFACE flag of this class file is set,\n   its ACC_ABSTRACT flag must also be set (JLS 9.1.1.1). Such a class\n   file must not have its ACC_FINAL, ACC_SUPER or ACC_ENUM flags set.\n\nThe patch sets ACC_SUPER only if ACC_INTERFACE is not set.\n\nSigned-off-by: Yevgeny Rouban \u003cyevgeny.y.rouban@intel.com\u003e\nChange-Id: I6cc4b215a6584d177845a4f8cce1efeb1650f646\n"
    },
    {
      "commit": "d2fe10a3a34af171bf1631219cd2d6ff6b7778b5",
      "tree": "b6b7eb8eba23a5c2723518da99c03bf47b97f58a",
      "parents": [
        "5a3f55ad9519e87c0d3bbddaf3d8a186a887a79b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jan 15 10:20:56 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Feb 17 11:32:15 2014 +0100"
      },
      "message": "Remove blacklist\n\nRemoves the class initialization blacklist and use transaction to detect and\nrevert class initialization attempting to invoke native method. This only\nconcerns class initialization happening at compilation time when generating an\nimage (like boot.art for the system).\n\nIn transactional mode, we log every object\u0027s field assignment and array update.\nTherefore we\u0027re able to abort a transaction to restore values of fields and\narray as they were before the transaction starts. We also log changes to the\nintern string table so we can restore its state prior to transaction start.\n\nSince transactional mode only happens at compilation time, we don\u0027t need to log\nall these changes at runtime. In order to reduce the overhead of testing if\ntransactional mode is on/off, we templatize interfaces of mirror::Object and\nmirror::Array, respectively responsible for setting a field and setting an\narray element.\n\nFor various reasons, we skip some specific fields from transaction:\n- Object\u0027s class and array\u0027s length must remain unchanged so garbage collector\ncan compute object\u0027s size.\n- Immutable fields only set during class loading: list of fields, method,\ndex caches, vtables, ... as all classes have been loaded and verified before a\ntransaction occurs.\n- Object\u0027s monitor for performance reason.\n\nBefore generating the image, we browse the heap to collect objects that need to\nbe written into it. Since the heap may still holds references to unreachable\nobjects due to aborted transactions, we trigger one collection at the end of\nthe class preinitialization phase.\n\nSince the transaction is held by the runtime and all compilation threads share\nthe same runtime, we need to ensure only one compilation thread has exclusive\naccess to the runtime. To workaround this issue, we force class initialization\nphase to run with only one thread. Note this is only done when generating image\nso application compilation is not impacted. This issue will be addressed in a\nseparate CL.\n\nBug: 9676614\nChange-Id: I221910a9183a5ba6c2b99a277f5a5a68bc69b5f9\n"
    },
    {
      "commit": "fd14755c09ada4769b5b6658e484441ca3f628b5",
      "tree": "c70c10b6e319f44dadb56c78acaf7ce89b502d82",
      "parents": [
        "3c976a8f82007285316dd9d1bbccb659b0668a06",
        "0177e53ea521ad58b70c305700dab32f1ac773b7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 12 01:16:29 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 12 01:16:30 2014 +0000"
      },
      "message": "Merge \"Work in the direction of hard float quick ABIs.\""
    },
    {
      "commit": "0177e53ea521ad58b70c305700dab32f1ac773b7",
      "tree": "db15627a19a04634cf84cecd15b813319d80d225",
      "parents": [
        "abaf927f29f6feceb3df3e6ced7d01970ba0dbe9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 11 16:30:46 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 11 17:02:21 2014 -0800"
      },
      "message": "Work in the direction of hard float quick ABIs.\n\nPass a shorty to ArtMethod::Invoke so that register setup can use it.\nDocument x86-64 ABI.\nAdd extra debug output for one JNI native method registration fails, namely a\ndump of the Class and its dex file\u0027s location.\nAdd hack to get testing of OatMethod\u0027s without GC maps working in 64bit.\n\nChange-Id: Ic06b68e18eac33637df2caf5e7e775ff95ae70f3\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": "a52214230ad091359956ed7566670963aedf2045",
      "tree": "d5af74460066ce7ef7e6f7bf212552ba086867f2",
      "parents": [
        "d1b9241a91f5eef9995e54cf80f9789045e5a233",
        "0376e6b62bfb43b515b791f0a7afed2d0d8030bc"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Feb 07 09:00:45 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 07 09:00:46 2014 +0000"
      },
      "message": "Merge \"Fix JDWP thread crash.\""
    },
    {
      "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": "0376e6b62bfb43b515b791f0a7afed2d0d8030bc",
      "tree": "776dc23a8313dac196ac485975aa6d8f228d7756",
      "parents": [
        "78c0bb9bc0668be07baa0bde1e82a475a0ac1f86"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 06 18:12:59 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 06 18:13:54 2014 +0100"
      },
      "message": "Fix JDWP thread crash.\n\nFix a crash happenning when JDWP thread attempts to process incoming packets\nfrom a closed socket. It happens when the runtime shuts down while JDWP thread\nis still running and waiting for incoming JDWP packets.\n\nWhen we close the JDWP connection from runtime destructor, we wake up the JDWP\nthread. To avoid this, we call Dbg::Dispose before closing the connection.\n\nBug: 12578041\nChange-Id: I8d03478b6c3f5f49e08899d476f292b7a401d5f3\n"
    },
    {
      "commit": "65637ebbb3c5bdf3f287a76df29a0340c10414c8",
      "tree": "b9f365900059818cb0dedd4acef38c8cd78143d7",
      "parents": [
        "49c670f268218f3b71dbdd99f26606487713f864"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 10 17:40:02 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jan 14 10:30:37 2014 +0100"
      },
      "message": "Fix JDWP IsCollected command handling.\n\nUpdate the handling of the JDWP IsCollected command for \u0027null\u0027 object id and\ninvalid object id.\n\nWe follow the RI where \u0027null\u0027 object id triggers an INVALID_OBEJCT error but\nan invalid object id does not trigger error and return \u0027true\u0027 result.\n\nAlso fix handling of \u0027null\u0027 object id to avoid confusion with valid object id.\nWe used to rely on ObjectRegistry::Get returning NULL to detect null object id\n(in which case we return an INVALID_OBJECT error). The issue is this method\nmay also return NULL for a valid object id if the corresponding object has\nbeen collected. In this case, we must not return any JDWP error and the result\nof the command should be \u0027true\u0027 meaning the object identified by the given id\nhas been collected.\n\nBug: 12221035\nChange-Id: I013f3759bac7cf5b1e9ee3e8c0d1bb2a11f1b654\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": "f288bd1b268bbbd94c163c9c23bdd20e42bbc36b",
      "tree": "9e70a2778d34bfd5ca096d27c254c2639346b033",
      "parents": [
        "ff8d298c9a937822492e85b264bc0c4a3b3642a9",
        "e96060aa2483529d087031f7cdcc0405f1ef9218"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 12 15:52:24 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 12 15:52:26 2013 +0000"
      },
      "message": "Merge \"Manage JDWP errors related to garbage collection.\""
    },
    {
      "commit": "e96060aa2483529d087031f7cdcc0405f1ef9218",
      "tree": "72812d15a71818a8b197b17e48199560bc83a8ae",
      "parents": [
        "315ab6c077c4db2031f1ffa40b78722d8269dc9b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Dec 11 12:06:28 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 12 10:03:39 2013 +0100"
      },
      "message": "Manage JDWP errors related to garbage collection.\n\nReturns INVALID_OBJECT error in case of invalid object ID or null object ID in\ncommands ObjectReference.DisableCollection, ObjectReference.EnableCollection\nand ObjectReference.IsCollected.\n\nNote: JDWP specs do not state ObjectReference.EnableCollection must return any\nerror code. We choose to be more strict so these three commands all behave the\nsame.\n\nChange-Id: I06fb75b75f7d33cf4d23e121d9541bfd70b778bb\n"
    },
    {
      "commit": "6054239c1d10e35dfa953c9c3d414db366e86650",
      "tree": "3f06f1636d4142ef9c518374d82999a527fb7781",
      "parents": [
        "19031d51ab9edfc3b1996891d654a6b86ca937c0",
        "0630ab5239a7d7be24dedbc3f66c822332446fc3"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 12 08:33:37 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 12 08:33:37 2013 +0000"
      },
      "message": "Merge \"Fix null argument handling during invoke from JDWP.\""
    },
    {
      "commit": "0630ab5239a7d7be24dedbc3f66c822332446fc3",
      "tree": "3043efa35ae177db590340138b52772bf71642dd",
      "parents": [
        "315ab6c077c4db2031f1ffa40b78722d8269dc9b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Nov 28 18:53:35 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 12 09:29:04 2013 +0100"
      },
      "message": "Fix null argument handling during invoke from JDWP.\n\nFix a crash when passing null argument to a JDWP invoke.\n\nChange-Id: I167f93f3a411f0de8458db3ba5bed3169d557ee9\n"
    },
    {
      "commit": "8755359a35a4aa915fe3753633015263c7e97b74",
      "tree": "57c0b62f7e9b6cacfbd18d1e33f437b69621fa48",
      "parents": [
        "0b5a3fe08213dff52b73b2388b50a87d09b7da4f",
        "c528dba35b5faece51ca658fc008b688f8b690ad"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 11 20:25:08 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 11 20:25:09 2013 +0000"
      },
      "message": "Merge \"Enable moving classes.\""
    },
    {
      "commit": "c528dba35b5faece51ca658fc008b688f8b690ad",
      "tree": "d95c113a639d07f7e3b88e8a6caa9b5f6e044801",
      "parents": [
        "76f552307ee980221626d1dff0ada56c989d24ca"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 26 12:00:11 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 10 16:00:58 2013 -0800"
      },
      "message": "Enable moving classes.\n\nSlight reduction in Zygote size, memory savings are in the noise.\nBefore: Zygote size: 8739224\nAfter: Zygote size: 8733568\n\nFixed a bug where we didn\u0027t set the concurrent start bytes after\nswitching the allocator from bump pointer to ROSAlloc in the\nzygote. This caused excessive memory usage.\n\nAdded the method verifiers as roots to fix an issue caused by\nRegTypes holding a Class*.\n\nAdded logic to clear card table in the SemiSpace collector, this\nreduces DalvikOther from ~2400k -\u003e ~1760k when using the SemiSpace\ncollector.\n\nAdded a missing lock to the timing loggers which caused a rare\none time crash in std::set.\n\nBug: 11771255\nBug: 8499494\nBug: 10802951\n\nChange-Id: I99d2b528cd51c1c5ed7012e3220b3aefded680ae\n"
    },
    {
      "commit": "123756a041baf8421ed933312605daa5ef082f6f",
      "tree": "0b9524660399b9e42adcc178027c9ddd8a61bd38",
      "parents": [
        "315ab6c077c4db2031f1ffa40b78722d8269dc9b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Nov 27 15:49:42 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Dec 05 15:02:35 2013 +0100"
      },
      "message": "Fix JDWP class-only modifier.\n\nFix Dbg::MatchType which is used for class-only and exception-only modifiers.\n\nAlso fix crash happening when notifying an exception. A debugger may walk the\nstack of the current thread so we need to keep the instrumentation stack frame\nsynced with the native stack.\n\nBug: 11856587\nChange-Id: Ibf95f8a83ce9ee640abf945e498b42cc88ea92a0\n"
    },
    {
      "commit": "87118ed6f3f99e7df33214c277cf200a7b9a7499",
      "tree": "ffcd467906f1e23dfcce6ec58327bf878b6a75ae",
      "parents": [
        "5da3778746375b73e7e77c5f1371f29684674776"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 26 17:57:18 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 26 17:57:18 2013 +0100"
      },
      "message": "Fix JDWP single-step removal.\n\nChange-Id: I4b977ea7c60b32723009e571269ca5fc1c6e264e\n"
    },
    {
      "commit": "dc10addb338cabc936462b889f5be63030299eb4",
      "tree": "75d583b2e3bab97c77ca37c8e6e28c860f536095",
      "parents": [
        "d9cffeaa478bd30ad89a9dfc9680a27ce5efaadf",
        "d38667a055d507492fd05f78519a7e1f0b85ea03"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Nov 25 16:23:26 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 25 16:23:27 2013 +0000"
      },
      "message": "Merge \"Minor field name cleanup in debugger.\" into dalvik-dev"
    },
    {
      "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": "34a0e6a6d315999ddf6b64bb10b6ece25b90b25a",
      "tree": "03a1c591da3ff125afa391869bcdd9df95821b67",
      "parents": [
        "2054553237998043f0cd3d6b9fef799a4e6d95c0",
        "cbb2d20bea2861f244da2e2318d8c088300a3710"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 20 19:34:11 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 20 19:34:11 2013 +0000"
      },
      "message": "Merge \"Refactor allocation entrypoints.\" into dalvik-dev"
    },
    {
      "commit": "cbb2d20bea2861f244da2e2318d8c088300a3710",
      "tree": "9735d496716cf165ea0ee2d7e2f62d723ffc7734",
      "parents": [
        "d31fb9718a6180304cd951619dc36be8e090a641"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 14 17:45:16 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 20 11:14:11 2013 -0800"
      },
      "message": "Refactor allocation entrypoints.\n\nAdds support for switching entrypoints during runtime. Enables\naddition of new allocators with out requiring significant copy\npaste. Slight speedup on ritzperf probably due to more inlining.\n\nTODO: Ensuring that the entire allocation path is inlined so\nthat the switch statement in the allocation code is optimized\nout.\n\nRosalloc measurements:\n4583\n4453\n4439\n4434\n4751\n\nAfter change:\n4184\n4287\n4131\n4335\n4097\n\nChange-Id: I1352a3cbcdf6dae93921582726324d91312df5c9\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": "212d2ab3f5b92095e90008f27293531fc311e96d",
      "tree": "67d62c792372509e65070cbfc284790d2126dc8b",
      "parents": [
        "d31fb9718a6180304cd951619dc36be8e090a641",
        "579b02416e05e32e535126e1ed61613a2cdb030e"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Nov 19 21:55:36 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Nov 19 21:55:36 2013 +0000"
      },
      "message": "Merge \"Add support for JDWP METHOD_EXIT_WITH_RETURN_VALUE events.\" 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": "e24fa3e678b1432f8e7325b9b5718d5a31cb74e1",
      "tree": "1711c7ef571a4ac030d4995de0c53fbeb7c6ea88",
      "parents": [
        "d08a4984b4153f3be3d65d339eaac985da7e17ab",
        "51db44a194bafc3810a41164a8b39614f10e79df"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 19 18:38:58 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Nov 19 18:38:59 2013 +0000"
      },
      "message": "Merge \"Propagate \u0027this_object\u0027 for method unwind event.\" into dalvik-dev"
    },
    {
      "commit": "51db44a194bafc3810a41164a8b39614f10e79df",
      "tree": "c5a02ad6cafe66b10f98957cb17db469fb008ede",
      "parents": [
        "03aca12cc4b15a4d2fe1c6acbcb1d62b2baa9eb4"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 19 10:00:29 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 19 10:06:03 2013 +0100"
      },
      "message": "Propagate \u0027this_object\u0027 for method unwind event.\n\nPropagates the \u0027this_object\u0027 to InstrumentationListener::MethodUnwind callback.\n\nChange-Id: I12561f1a611b8399b94e669f9b8a6eaaf1a58631\n"
    },
    {
      "commit": "cf58d4adf461eb9b8e84baa8019054c88cd8acc6",
      "tree": "c49fa473b17e299bc649688076e7d69938741e4e",
      "parents": [
        "be56c9e63335ce99f1042e8660aeac4690b965a9"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Sep 26 14:21:22 2013 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Sat Nov 16 21:35:03 2013 -0800"
      },
      "message": "A custom \u0027runs-of-slots\u0027 memory allocator.\n\nBug: 9986565\nChange-Id: I0eb73b9458752113f519483616536d219d5f798b\n"
    },
    {
      "commit": "b7cefc7f5cac99a62fd4e662c1bdeec750434e28",
      "tree": "4d5a37f95ef3af6fa1febfa62bf0af207724077c",
      "parents": [
        "ffcd9d25199a944625bd3c9a766349c23dcbdb66"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Nov 14 14:51:09 2013 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Nov 14 15:42:55 2013 -0800"
      },
      "message": "Put arguments first in debugger variable table and fix name bug.\n\nBug: 11569468\n\nChange-Id: I63d45427ded0937c3ab2456fe5cec22da5558e53\n"
    },
    {
      "commit": "590fee9e8972f872301c2d16a575d579ee564bee",
      "tree": "b02db45c72f1911ec896b93379ada0276aea3199",
      "parents": [
        "5b70680b8df6d8fa95bb8e1070d0107f3d388940"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 13 13:46:47 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 11 15:34:27 2013 -0800"
      },
      "message": "Compacting collector.\n\nThe compacting collector is currently similar to semispace. It works by\ncopying objects back and forth between two bump pointer spaces. There\nare types of objects which are \"non-movable\" due to current runtime\nlimitations. These are Classes, Methods, and Fields.\n\nBump pointer spaces are a new type of continuous alloc space which have\nno lock in the allocation code path. When you allocate from these it uses\natomic operations to increase an index. Traversing the objects in the bump\npointer space relies on Object::SizeOf matching the allocated size exactly.\n\nRuntime changes:\nJNI::GetArrayElements returns copies objects if you attempt to get the\nbacking data of a movable array. For GetArrayElementsCritical, we return\ndirect backing storage for any types of arrays, but temporarily disable\nthe GC until the critical region is completed.\n\nAdded a new runtime call called VisitObjects, this is used in place of\nthe old pattern which was flushing the allocation stack and walking\nthe bitmaps.\n\nChanged image writer to be compaction safe and use object monitor word\nfor forwarding addresses.\n\nAdded a bunch of added SIRTs to ClassLinker, MethodLinker, etc..\n\nTODO: Enable switching allocators, compacting on background, etc..\n\nBug: 8981901\n\nChange-Id: I3c886fd322a6eef2b99388d19a765042ec26ab99\n"
    },
    {
      "commit": "fa82427c68b09f4aedbee319dc71579afbfc66f5",
      "tree": "b8ae1c7be4a00dce290887ee857be5e466a0902b",
      "parents": [
        "6b98c91275d4361d1b74effad36995cc2d687a55"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Nov 05 16:12:57 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 06 12:00:14 2013 -0800"
      },
      "message": "Fix oatdump and valgrind.\n\nBug: 11531382\nMove allocation instrumentation out of runtime into instrumentation. Don\u0027t\nattempt to suspend threads in unstarted runtimes.\nMake indentation support sputc returning eof, on which it will sync and try\nagain. A further failure likely means the disk is full.\nMove the dump-oat output directory to be art as now there\u0027s too much output to\nfit all the dump-oat data in our standard /tmp.\n\nChange-Id: I8ea848ace318552c180e2efa46570288ff1ca62c\n"
    },
    {
      "commit": "4598669063e65a66b7a35f63ba035139d4c795d2",
      "tree": "b48c2ac07195d931351ae95987c105e2ad1fec24",
      "parents": [
        "05c487d13791ffa238bef540dc11af1113ff1966",
        "e2946917852af9d2ec643c7c987d2bb66cf2f086"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Oct 30 21:26:12 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 30 21:26:12 2013 -0700"
      },
      "message": "am e2946917: am ebaa337a: am c3b800aa: Merge \"Fix JDWP line table output.\" into klp-dev\n\n* commit \u0027e2946917852af9d2ec643c7c987d2bb66cf2f086\u0027:\n  Fix JDWP line table output.\n"
    }
  ],
  "next": "dfb325e0ddd746cd8f7c2e3723b3a573eb7cc111"
}
