)]}'
{
  "log": [
    {
      "commit": "a15a81b2bd6d08d131e0726ddb622d940ed3c6da",
      "tree": "5cff81681ceae0efa521582498af88bf4c0d74ee",
      "parents": [
        "33a60e47278d09acfa44d92ad85b1902b57a6b5b"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue May 27 18:25:47 2014 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue May 27 18:25:47 2014 -0700"
      },
      "message": "Fix method tracing\u0027s handling of shadow frames on startup.\n\nBug: 15142926\nChange-Id: I7d7896ec3f62f46a43578f536292db6e219d83f0\n"
    },
    {
      "commit": "3e5cf305db800b2989ad57b7cde8fb3cc9fa1b9e",
      "tree": "52a737323ebd505cf37ca0e4b2dcee6524fba07f",
      "parents": [
        "27a2b70f612af9afc0fb5392fb10059f6a0a3569"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue May 20 16:40:37 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue May 20 21:17:03 2014 -0700"
      },
      "message": "Begin migration of art::Atomic to std::atomic.\n\nChange-Id: I4858d9cbed95e5ca560956b9dabd976cebe68333\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": "8a630577ed2d9e9571c3434c505e5de223b23c07",
      "tree": "106367100c639011f0abb72b3b0e227c0764e8e0",
      "parents": [
        "96c6ab93336b972a38bd2448bcccf19188b8389b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 09 18:45:35 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 25 12:24:46 2014 +0100"
      },
      "message": "Move mapping table and vmap table offsets to OatMethodHeader.\n\nThis change has a libcore/ companion CL\n  \"Remove ArtMethod\u0027s quick fields mapping table and vmap table.\"\n  https://android-review.googlesource.com/91254\n\nBug: 11767815\nChange-Id: I46ce2067e1ecd915da3890606498e31ffc332813\n"
    },
    {
      "commit": "618a87009202dc959c935ed8f237ae32bdec57d0",
      "tree": "905c57ff2edb26e58f81b03e753378880dd20a7a",
      "parents": [
        "00256f3e03adaf11b8fbb8bb8b7a11a9c316127d",
        "bf079fe015e3b2d966e111efc61728b6e6892ec3"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 22 09:23:39 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 22 09:23:40 2014 +0000"
      },
      "message": "Merge \"Fix crash when debugging exception\""
    },
    {
      "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": "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": "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": "bf079fe015e3b2d966e111efc61728b6e6892ec3",
      "tree": "43b61e0b303090830f0d6067c56f2ded18b2ca9d",
      "parents": [
        "6f31ce382777d82952d019908866ff28ef3bbc76"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 01 15:31:05 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 04 11:11:05 2014 +0200"
      },
      "message": "Fix crash when debugging exception\n\nFixes a crash when detaching the debugger during an exception event. The cause\nis a concurrent modification of Instrumentation::exception_caught_listeners_\nlist (consequence of debugger being detached) while we loop over its elements.\n\nWorkaround the issue by making a copy of the listeners list.\n\nBug: 13738672\nChange-Id: I56b84c5c8f31d6fbda1ba7cb35caeefc5e7ca60f\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": "661974a5561e5ccdfbac8cb5d8df8b7e6f3483b8",
      "tree": "02e428694277d85a98505f8e814aba378fc7651c",
      "parents": [
        "3cd52df3d740f8a656233b199dfcaab165f415ff"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 09 11:23:53 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 05 12:44:22 2014 -0800"
      },
      "message": "Fix valgrind gtests and memory leaks.\n\nAll tests pass other than image_test which passes if some bad reads\nare disabled (buzbee working on this).\n\nChange-Id: Ifd6b6e3aed0bc867703b6e818353a9f296609422\n"
    },
    {
      "commit": "d889178ec78930538d9d6a66c3df9ee9afaffbb4",
      "tree": "6fa250bdadcdfc1702f57500e618b51df6d46828",
      "parents": [
        "06c09f6d79e037ee00113d6289ef98226680797d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Mar 02 13:28:37 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 03 17:08:30 2014 -0800"
      },
      "message": "Guard entrypoint changing by runtime shutdown lock.\n\nThere was a race when we changed the allocation entrypoints where a\nnew thread would be starting (Thread::Init) and initialize to the\nwrong entrypoints. Guarding allocation entrypoint changing\nwith the runtime shutdown lock fixes this race condition since\nThread::Init is only called with the runtime shutdown lock held.\n\nBug: 13250963\n\nChange-Id: I8eb209c124b6bf17020de874e1b0083f158b8200\n"
    },
    {
      "commit": "563b47cc142e477da244539b1d63070425e7fd78",
      "tree": "3da2bb5ccdcd16f7104211855d47ece3f1d24767",
      "parents": [
        "e58d0203351d9740a8f74a140fdee342168e6552"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Feb 28 17:18:37 2014 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Feb 28 17:34:30 2014 -0800"
      },
      "message": "Fix the bug that some compiled code was invoked with -Xint.\n\nSome compiled code (probably static methods) is still being invoked\nwith -Xint. Added an assert to detect this case.\n\nBug: 13250375\nChange-Id: Iecfe8ef40c6c326962593db78e6e1d9f1c93842e\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": "ef7d42fca18c16fbaf103822ad16f23246e2905d",
      "tree": "c67eea52a349c2ea7f2c3bdda8e73933c05531a8",
      "parents": [
        "822115a225185d2896607eb08d70ce5c7099adef"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jan 06 12:55:46 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 06 23:20:27 2014 -0800"
      },
      "message": "Object model changes to support 64bit.\n\nModify mirror objects so that references between them use an ObjectReference\nvalue type rather than an Object* so that functionality to compress larger\nreferences can be captured in the ObjectRefererence implementation.\nObjectReferences are 32bit and all other aspects of object layout remain as\nthey are currently.\n\nExpand fields in objects holding pointers so they can hold 64bit pointers. Its\nexpected the size of these will come down by improving where we hold compiler\nmeta-data.\nStub out x86_64 architecture specific runtime implementation.\nModify OutputStream so that reads and writes are of unsigned quantities.\nMake the use of portable or quick code more explicit.\nTemplatize AtomicInteger to support more than just int32_t as a type.\nAdd missing, and fix issues relating to, missing annotalysis information on the\nmutator lock.\nRefactor and share implementations for array copy between System and uses\nelsewhere in the runtime.\nFix numerous 64bit build issues.\n\nChange-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822\n"
    },
    {
      "commit": "138dbfc3336e379d74d157086f69a0fbe830089b",
      "tree": "f5fa88466e6ab339d2a6faf9c9105bafcaee3ea7",
      "parents": [
        "62e45483db4aa1be096d3ce91903e01ef52fb901"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Dec 04 18:15:25 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jan 13 15:08:24 2014 +0100"
      },
      "message": "Selective deoptimization.\n\nUpdate the instrumentation to allow selective deoptimization.\n\nSeparate instrumentation listener registration from stubs configuration. A\nlistener is now responsible for configuring the appropriate stubs.\n- The method tracing listener installs instrumentation entry/exit stubs or\nthe interpreter depending on the accuracy of events we want (controlled by\nkDeoptimizeForAccurateMethodEntryExitListeners).\n- The debugger registers itself as an instrumentation listener but does not\nmodify methods entrypoints. It only does this on demand when deoptimizing one\nmethod or all the methods.\n\nThe selective deoptimization is used for breakpoint only. When a breakpoint is\nrequested, the debugger deoptimizes this method by setting its entrypoint to\nthe interpreter stub. As several breakpoints can be set on the same method, we\ndeoptimize only once. When the last breakpoint on a method is removed, we\nreoptimize it by restoring the original entrypoints.\n\nThe full deoptimization is used for method entry, method exit and single-step\nevents. When one of these events is requested, we force eveything to run with\nthe interpreter (except native and proxy methods). When the last of these\nevents is removed, we restore all methods entrypoints except those which are\ncurrently deoptimized.\n\nDeoptimizing a method requires all mutator threads be suspended in order to\nwalk each thread\u0027s stack and ensure no code is actually executing while we\nmodify methods entrypoints. Suspending all the threads requires to not hold\nany lock.\nIn the debugger, we deoptimize/undeoptimize when the JDWP event list changes\n(add or remove a breakpoint for instance). During the update, we need to hold\nthe JDWP event list lock. This means we cannot suspend all the threads at this\ntime.\nIn order to deal with these constraints, we support a queue of deoptimization\nrequests. When an event needs selective/full deoptimization/undeoptimization,\nwe save its request in the queue. Once we release the JDWP event list lock, we\nsuspend all the threads, process this queue and finally resume all the threads.\nThis is done in Dbg::ManageDeoptimization. Note: threads already suspended\nbefore doing this remain suspended so we don\u0027t \"break\" debugger suspensions.\n\nWhen we deoptimize one method or every method, we need to browse each thread\u0027s\nstack to install instrumentation exit PC as return PC and save information in\nthe instrumentation stack frame. Now we can deoptimize multiple times during\nthe execution of an application, we need to preserve exisiting instrumentation\nframes (which is the result of a previous deoptimization). This require to push\nnew instrumentation frames before existing ones so we don\u0027t corrupt the\ninstrumentation stack frame while walking the stack.\n\nBug: 11538162\nChange-Id: I477142df17edf2dab8ac5d879daacc5c08a67c39\n"
    },
    {
      "commit": "e6da9af8dfe0a3e3fbc2be700554f6478380e7b9",
      "tree": "127a0565fce79f05d82d0ff242fbbffa6e2bc6b3",
      "parents": [
        "977d409b959497eecc44a35cff16115d0f04ccab"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 16 11:54:42 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 08 14:16:12 2014 -0800"
      },
      "message": "Background compaction support.\n\nWhen the process state changes to a state which does not perceives\njank, we copy from the main free-list backed allocation space to\nthe bump pointer space and enable the semispace allocator.\n\nWhen we transition back to foreground, we copy back to a free-list\nbacked space.\n\nCreate a seperate non-moving space which only holds non-movable\nobjects. This enables us to quickly wipe the current alloc space\n(DlMalloc / RosAlloc) when we transition to background.\n\nAdded multiple alloc space support to the sticky mark sweep GC.\n\nAdded a -XX:BackgroundGC option which lets you specify\nwhich GC to use for background apps. Passing in\n-XX:BackgroundGC\u003dSS makes the heap compact the heap for apps which\ndo not perceive jank.\n\nResults:\nSimple background foreground test:\n0. Reboot phone, unlock.\n1. Open browser, click on home.\n2. Open calculator, click on home.\n3. Open calendar, click on home.\n4. Open camera, click on home.\n5. Open clock, click on home.\n6. adb shell dumpsys meminfo\n\nPSS Normal ART:\nSample 1:\n    88468 kB: Dalvik\n     3188 kB: Dalvik Other\nSample 2:\n    81125 kB: Dalvik\n     3080 kB: Dalvik Other\n\nPSS Dalvik:\nTotal PSS by category:\nSample 1:\n    81033 kB: Dalvik\n    27787 kB: Dalvik Other\nSample 2:\n    81901 kB: Dalvik\n    28869 kB: Dalvik Other\n\nPSS ART + Background Compaction:\nSample 1:\n    71014 kB: Dalvik\n     1412 kB: Dalvik Other\nSample 2:\n    73859 kB: Dalvik\n     1400 kB: Dalvik Other\n\nDalvik other reduction can be explained by less deep allocation\nstacks / less live bitmaps / less dirty cards.\n\nTODO improvements: Recycle mem-maps which are unused in the current\nstate. Not hardcode 64 MB capacity of non movable space (avoid\nreturning linear alloc nightmares). Figure out ways to deal with low\nvirtual address memory problems.\n\nBug: 8981901\n\nChange-Id: Ib235d03f45548ffc08a06b8ae57bf5bada49d6f3\n"
    },
    {
      "commit": "b122a4bbed34ab22b4c1541ee25e5cf22f12a926",
      "tree": "624f16271f4481a8fd5aa2f607385f490dc7b3ae",
      "parents": [
        "e40687d053b89c495b6fbeb7a766b01c9c7e039c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Nov 19 18:00:50 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Dec 20 08:01:57 2013 -0800"
      },
      "message": "Tidy up memory barriers.\n\nChange-Id: I937ea93e6df1835ecfe2d4bb7d84c24fe7fc097b\n"
    },
    {
      "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": "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": "5bfd5c9e75b31afab2cb3676b8dc71e58a7d90df",
      "tree": "cb64102adf422593fea1d9ae76c4964037b4bb20",
      "parents": [
        "03aca12cc4b15a4d2fe1c6acbcb1d62b2baa9eb4"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Nov 15 11:36:07 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Nov 15 14:56:26 2013 +0100"
      },
      "message": "Fix missing class initialization during instrumentation.\n\nStatic methods (except the \u003cclinit\u003e) all point to the resolution trampoline\nto handle class initialization. When we enable instrumentation, we update the\nentry point to the instrumentation stub. But doing so makes us miss the call\ninto the trampoline.\n\nThis CL fixes this issue by leaving the resolution trampoline. Once a method\u0027s\nclass is initialized, we update all its static methods\u0027 entry point. When\ninstrumentation is enabled, this entry point becomes the instrumentation entry\nstub.\n\nThis also allows to post method enter events in the right order during static\ninvokes. First, we get into the trampoline which call the method\u0027s class\n\u003cclinit\u003e method and post the corresponding \"method enter\" event. Then we get\ninto the instrumentation entry stub of the static method being called and post\nthe corresponding \"method enter\" event before getting into its code.\n\nBug: 11686442\nChange-Id: I202db921225c8be0b2191074d09b0ba40f9248b2\n"
    },
    {
      "commit": "cf18d7d7e61756412713ec14ba6dbdf272136a35",
      "tree": "4c92c7d284e553e1a466a526dcb7a751822f7aa5",
      "parents": [
        "bbb32c277b800a8ee378c16a3645ab6d4d19aef1",
        "910a7b7a6f4a895186307359ea87f73f80176ae4"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Nov 06 15:55:24 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 06 15:55:24 2013 -0800"
      },
      "message": "am 910a7b7a: am 937041e4: am 02b10d6f: Do not instrument proxy methods.\n\n* commit \u0027910a7b7a6f4a895186307359ea87f73f80176ae4\u0027:\n  Do not instrument proxy methods.\n"
    },
    {
      "commit": "02b10d6f493a7f15123c01048f05dba9e4567b48",
      "tree": "de3c0e75469019363ef14ab3d2a18f14f25fb6ae",
      "parents": [
        "2bd5c233bb95877eab87c897bf802ae67a35178b"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Nov 06 15:21:24 2013 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Nov 06 15:21:24 2013 -0800"
      },
      "message": "Do not instrument proxy methods.\n\nThis fixes issues with traceview on Books.\n\nBug: 11512992\nChange-Id: Id67578af5e404fca51aa99860a3a61a68574ccf8\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": "ee1997a3b83334985e757f369c09e111b121661b",
      "tree": "8745229cde52990208b27af54d7e80ea2fc274c4",
      "parents": [
        "9f69b62e6b009b29e6420c49e7444e91466a6a33"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 19 14:47:09 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Oct 17 11:15:43 2013 +0200"
      },
      "message": "Improve interpreter handler table management.\n\nWe still have two handlers table:\n- the \"main\" table which holds execution handlers of each instruction,\n- the \"alternative\" table which holds handlers supporting instrumentation\nbefore jumping to the corresponding instruction handler from the \"main\" table.\n\nInstrumentation holds the index of the handler table the interpreter must use.\nThis index is represented by the InterpreterHandlerTable enum and is stored in\nthe Instrumentation::interpreter_handler_table_ field.\n\nInterpreter\u0027s current handler table update happens:\n- on backward branch\n- after invoke\n- when throwing exception.\nIn the case of the backward branch and exception, we only update the table if\nany thread\u0027s flags is set. This allows to only do one test for handling thread\nsuspension and handler table update.\n\nThis CL also removes the local variable \"instrumentation\". Every handler which\nneeds it will get it from Runtime::Current()-\u003eGetInstrumentation().\n\nChange-Id: Id886ea7ebf3dac1285f0ca701c098aee7ebaab8d\n"
    },
    {
      "commit": "947ff080753c786a74f1cd7aeb09f717bb7074bd",
      "tree": "ae8d4ceb42602b19b62b61205a5bcb70e6ef6ab3",
      "parents": [
        "ad5f8731448f03c59d5fc8d9b5b25ee91d351ba9"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 17 14:10:13 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 17 15:28:37 2013 +0200"
      },
      "message": "Load shadow frame\u0027s this object only upon instrumentation.\n\nWe used to load the shadow frame\u0027s this object when entering the interpreter\nand push it into thread\u0027s SIRT to make it visible to garbage collector. But\nit is only used by instrumentation listeners.\n\nWe now move this load at each place an instrumentation listener is called. This\navoids loading it when instrumentation is disabled. This also allows to remove\nthe SIRT reference and the push/pop management it implies when entering/exiting\nthe interpreter.\n\nThe performance improvement is 6% in average on our benchmarks suite.\n\nThis CL also makes method Instrumentation::ExceptionCaughtEvent const so we can\nuse a \"const instrumentation::Instrumentation*\" object in interpreter.\n\nChange-Id: I2caccba9a906f244c8057b24031250f9824cc711\n"
    },
    {
      "commit": "7b6da36ac600178f0cdc60a1c36843c3a4fd300e",
      "tree": "4563f4db5290e693255a7a529c54d6473521aa30",
      "parents": [
        "fffd663bd276ee5fd8fda6641689546042429981"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 11 09:29:40 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 11 09:29:40 2013 -0700"
      },
      "message": "Don\u0027t deopt for tracing due to stability.\n\nChange-Id: I49525f950c669a6dab4f7038b10fccb663087acf\n"
    },
    {
      "commit": "816432e297f9d440902fd827ca2e78e8c28f9f6b",
      "tree": "513061eed29ffe0e5d0bb189bb2a6ba89cbad71f",
      "parents": [
        "9b297bfc588c7d38efd12a6f38cd2710fc513ee3"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 06 15:47:45 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 06 15:47:45 2013 -0700"
      },
      "message": "Deopt for method entry/exit when not sampling.\n\nBug 9968239.\nNote, this makes profiling performance horrendously slow. The real fix is to\nget the sampling enabled flag to be set to true by frameworks.\n\nChange-Id: I101e524fe5bbff99142015e69177218796ae20da\n"
    },
    {
      "commit": "02e25119b15a6f619f17db99f5d05124a5807ff3",
      "tree": "7be4cbbf28033e5ee0621565b410fe5d8170a8fb",
      "parents": [
        "7d70a7932f0ba09eb01a93caab060aef1403d4e6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 14 16:14:24 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 16 13:15:37 2013 -0700"
      },
      "message": "Fix up TODO: c++0x, update cpplint.\n\nNeeded to update cpplint to handle const auto.\n\nFixed a few cpplint errors that were being missed before.\n\nReplaced most of the TODO c++0x with ranged based loops. Loops which\ndo not have a descriptive container name have a concrete type instead\nof auto.\n\nChange-Id: Id7cc0f27030f56057c544e94277300b3f298c9c5\n"
    },
    {
      "commit": "ea46f950e7a51585db293cd7f047de190a482414",
      "tree": "9dddc8073547a2dcb58a19e1728932a89cb149c3",
      "parents": [
        "5e3572709b5a5d59957f835db4f73760ecef08da"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 30 01:26:50 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 18:09:46 2013 -0700"
      },
      "message": "Refactor java.lang.reflect implementation\n\nCherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1.\n\nMove to ArtMethod/Field instead of AbstractMethod/Field and have\njava.lang.reflect APIs delegate to ArtMethod/ArtField.\n\nBug: 10014286.\n\nChange-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7\n"
    },
    {
      "commit": "848871b4d8481229c32e0d048a9856e5a9a17ef9",
      "tree": "4be4602e3becc899f76a29a87618801458fe04b9",
      "parents": [
        "423fb4d70f2ac36bf9f630146b4150771a8e7e76"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Aug 05 10:56:33 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Aug 07 22:17:00 2013 -0700"
      },
      "message": "Entry point clean up.\n\nCreate set of entry points needed for image methods to avoid fix-up at load time:\n - interpreter - bridge to interpreter, bridge to compiled code\n - jni - dlsym lookup\n - quick - resolution and bridge to interpreter\n - portable - resolution and bridge to interpreter\n\nFix JNI work around to use JNI work around argument rewriting code that\u0027d been\naccidentally disabled.\nRemove abstact method error stub, use interpreter bridge instead.\nConsolidate trampoline (previously stub) generation in generic helper.\nSimplify trampolines to jump directly into assembly code, keeps stack crawlable.\nDex: replace use of int with ThreadOffset for values that are thread offsets.\nTidy entry point routines between interpreter, jni, quick and portable.\n\nChange-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e\n"
    },
    {
      "commit": "166db04e259ca51838c311891598664deeed85ad",
      "tree": "5ffa63c1b3bf58e92be2890c54f0ba6fdec2059e",
      "parents": [
        "d41119e863a9f9c5809b7732d30870ffd237b60c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jul 26 12:05:57 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jul 29 09:52:11 2013 -0700"
      },
      "message": "Move assembler out of runtime into compiler/utils.\n\nOther directory layout bits of clean up. There is still work to separate quick\nand portable in some files (e.g. argument visitor, proxy..).\n\nChange-Id: If8fecffda8ba5c4c47a035f0c622c538c6b58351\n"
    },
    {
      "commit": "7934ac288acfb2552bb0b06ec1f61e5820d924a4",
      "tree": "43f3acd8af7fd34d4ae7b64f6e06bb8429d74bb8",
      "parents": [
        "fb331d7ca004f39608fcfdae49d38df90c702ea9"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 10:54:15 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 11:55:10 2013 -0700"
      },
      "message": "Fix cpplint whitespace/comments issues\n\nChange-Id: Iae286862c85fb8fd8901eae1204cd6d271d69496\n"
    },
    {
      "commit": "ac43ae545ffca66aac813ed3e6ab54e3559b5e4e",
      "tree": "39fa904ac9ef3086d0b68d39c171e4927eb29070",
      "parents": [
        "f1694e19322ba9a147b25347fe003482a5d4930d",
        "2d88862f0752a7a0e65145b088f49dabd49d4284"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 19 11:24:48 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jul 19 11:24:48 2013 -0700"
      },
      "message": "am 2d88862f: Fixing cpplint readability/casting issues\n\n* commit \u00272d88862f0752a7a0e65145b088f49dabd49d4284\u0027:\n  Fixing cpplint readability/casting issues\n"
    },
    {
      "commit": "2d88862f0752a7a0e65145b088f49dabd49d4284",
      "tree": "3fac6bbd9a0ff3836f361e46579151c8a93420b6",
      "parents": [
        "751d4ed43e8118f145edf18db4d987daf7dabbae"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 17:02:00 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 17:02:52 2013 -0700"
      },
      "message": "Fixing cpplint readability/casting issues\n\nChange-Id: I6821da0e23737995a9b884a04e9b63fac640cd05\n"
    },
    {
      "commit": "65d15d985a27be01e1d64f473af0e9d8eb19051d",
      "tree": "211dfad2d50cd42a1d5418941da44abeb1d2d16c",
      "parents": [
        "82f9f02d89ea859bd04514bd28bb6cac0409c7b2"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Jul 16 16:39:33 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jul 17 13:40:51 2013 -0700"
      },
      "message": "Fixes to instrumentation for debug build and interpreter.\n\n- Stub uninstall will put back the interpreter entry point if Xint\n  mode is specified.\n- Copy method entry and exit listeners before iterating over them\n  to prevent problems that occur when they are modified during\n  iteration.\n- Corrected checks from WalkStack and AssertPcIsWithinCode to\n  handle instrumented code since they are used to remove the stubs.\n\nChange-Id: Ib0e2b421e6b56d520e4643699624dd80ee5148e3\n"
    },
    {
      "commit": "7940e44f4517de5e2634a7e07d58d0fb26160513",
      "tree": "ac90242d96229a6942f6e24ab137bc1f8f2e0025",
      "parents": [
        "5cd9e3b122f276f610980cbaf0d2ad6ed4cd9088"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 13:46:57 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 17:49:01 2013 -0700"
      },
      "message": "Create separate Android.mk for main build targets\n\nThe runtime, compiler, dex2oat, and oatdump now are in seperate trees\nto prevent dependency creep.  They can now be individually built\nwithout rebuilding the rest of the art projects. dalvikvm and jdwpspy\nwere already this way. Builds in the art directory should behave as\nbefore, building everything including tests.\n\nChange-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81\n"
    },
    {
      "commit": "f3e861db83eec398c49e003fc323b7964fca6e50",
      "tree": "bf612abb7a9b1bce6c3e056fd382694e33d5d778",
      "parents": [
        "5f10000a4515b5d828a1182fd8d34367af496861"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jul 03 15:42:17 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jul 03 15:47:07 2013 -0700"
      },
      "message": "Fix GetQuickCodeFor to return actual code pointer if it exists.\n\nIf the compiled entry point is the interpreter entry point, the code\nnow tries to get oat code for it before returning.\n\nChange-Id: Iea1cec1ed003aadd71b432cc405fc81509bc644a\n"
    },
    {
      "commit": "9a916d3c0d0574d106c764e737c67b52988d6139",
      "tree": "759e3f6152e80ad08ba220692d30252c1f10bf7e",
      "parents": [
        "0b4e3ef67508a0b8c121b6b26ab5ea0a1d8e7141"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Jun 27 18:45:37 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Jul 02 14:12:36 2013 -0700"
      },
      "message": "Add marks for instrumentation frames that get interpreted.\n\nDuring instrumentation, if a method goes to the interpreter, a special callee-\nsave ref and args method frame is pushed onto the stack, instead of a frame for\nthe method being called. This change adds a bool to mark methods that end up\ninterpreted, so things that walk the stack know to look for the callee-save\nmethod instead.\n\nAlso included is a change to UnsafeLogFatalForThreadSuspendAllTimeout to prevent\nit from grabbing locks before dumping. This was breaking DumpLocked, which\neventually gets a ScopedObjectAccessUnchecked requiring those locks not be held.\n\nChange-Id: I7e68cf195c77f40df6f497551c94b0926d3c5065\n"
    },
    {
      "commit": "0aba0ba155bef7346bde19e53581200b89ae8a7a",
      "tree": "6590f8a50bde7c30b57f1bb0ae67c6d88cea8116",
      "parents": [
        "515661b14b60ab9684efa1ab1d5124934406094e"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Jun 03 14:49:28 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Jun 07 14:43:24 2013 -0700"
      },
      "message": "Created compiled stubs in image.\n\nSaves class linker from having to set code pointers when loading\nfrom an image. Added stubs for quick and portable resolution\ntrampolines, and interpreter-to-interpreter and interpreter-to-quick\nentry points. Also added sizing stats output for oat writer.\n\nChange-Id: I3905fae81047742c23d1cf0ca001db798db971b1\n"
    },
    {
      "commit": "aa4a793d7175ceeb1efa215c2af5e52e42b22f0a",
      "tree": "9c3db54a108d4327471c6d4890d28cdfe1f030ff",
      "parents": [
        "167436311a08a65dea28dda079a137893821c9c7"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon May 13 11:28:27 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon May 13 13:14:19 2013 -0700"
      },
      "message": "Rename abstract method code_ to entry_point_from_compiled_code_.\n\nChange-Id: I9b02d2df95bbeafa6e6387b461f574c57337a61e\n"
    },
    {
      "commit": "58df32711162823647356afe25ae2cde04133563",
      "tree": "df1b2b43b90f4861b475f1452b175353a56ec3d7",
      "parents": [
        "ede1807e3481a6937416964bb7556364f2d428e1"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Apr 22 15:28:53 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Apr 23 16:34:16 2013 -0700"
      },
      "message": "Removed compiled resolution trampoline.\n\nCreated assembly versions of resolution trampoline for portable and\nquick. Removed compiled version from the image.\n\nChange-Id: I183e110c4e102fb45ce6e7f4e855f8bed7986251\n"
    },
    {
      "commit": "c0bd4dace0ded3e7dee83f658f53370f1852b567",
      "tree": "93d8ef2c7945a8ee00923fbb6d100ab06c819e7d",
      "parents": [
        "c1fcdf1ec5a8c5ffaf9e857ea81ac7358d1df7f5"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Apr 11 15:52:28 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Apr 11 15:52:28 2013 -0700"
      },
      "message": "Temporarily clear exception during ExceptionCaughtEvent.\n\nIf there are listeners for the exception caught event, the exception\nneeds to be cleared since Check JNI checks to make sure there aren\u0027t\nany pending exceptions. This change clears the thread\u0027s exception,\nthen resets it after the event is sent.\n\nChange-Id: Ib7b5b52dafd73ff41bbdf30b866a8e9e6cd085cc\n"
    },
    {
      "commit": "14dd5a82ad85a28612bf86e755ff929d767cea4c",
      "tree": "59643b02b8931887e6b00589e41af137ee13a149",
      "parents": [
        "4b4d711852982716ac478288f210bb2a2f504589"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Apr 11 10:23:36 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Apr 11 11:22:36 2013 -0700"
      },
      "message": "Fix exception caught listeners and frame type for deopt.\n\nChange-Id: I5792ebe9a7772d068b6ec556b4fc27ddd44d7ca1\n"
    },
    {
      "commit": "62d6c772205b8859f0ebf7ad105402ec4c3e2e01",
      "tree": "e2f2ba6d71ed5a39c9f6909e3f7c08e998053315",
      "parents": [
        "c9b17c7ee96cd04fac9048aab624ed554fe260bf"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 27 08:32:07 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Apr 08 14:24:13 2013 -0700"
      },
      "message": "Interpreter entries and instrumentation as a listener.\n\nMake the instrumentation responsible for whether we want method entry/exit\nstubs, and allow it to use interpreter entry stubs when instruction by\ninstruction instrumentation is required. Improve deoptimization so more JDWP\ntest cases are passing.\n\nRefactor exception debug posting, in particular improve reporting in the\ninterpreter. Improve class linker exception throwing so that broken dex files\nare more likely to be reported. Fixes the performance issue Bug: 8410519.\n\nFix some error reporting lock level errors for the large object space. Make\nfast object verification faster.\n\nAdd some debug mode robustness to finding dex PCs in GC maps.\n\nAdd printf attributes to JniAbortF and fix errors.\n\nExpand run-test 044 to test return behaviors and fix issues with not throwing\nappropriate exceptions for proxies.\n\nEnsure causes are reported with a class linker NoClassDefFoundError and JNI\nNoSuchFieldError.\n\nRemove unused debugMe and updateDebuggerFromCode.\n\nThere\u0027s a minor sizing tweak to the arg array builder, and an extra reference\narray check in the interpreter.\n\nSome clean-up of trace code.\n\nFix reg type cache destructor if it is called after the reg type cache is\nshutdown (as is the case in oatdump).\n\nChange-Id: I6519c7b35df77f978d011999354c864f4918e8ce\n"
    },
    {
      "commit": "4f6ad8ab428038129b2d0d6c40b7fd625cca15e1",
      "tree": "d1025ed9203d0cdf7aa959d9cecd8dc1f0c0bfeb",
      "parents": [
        "aabe8adacc7bf3a8ab6f6f3dd37fc839b6fd762f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 18 15:27:28 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 18 15:29:59 2013 -0700"
      },
      "message": "Various performance improvements.\n\nPerformance had regressed due to verify object and method invocation changes.\nAvoid trampolines for static calls in same class.\nVarious inlining changes.\nMake verify object something that\u0027s only compiled-in in debug builds.\n\nChange-Id: Ia261a52232c3b10667c668f8adfadc0da3048bc5\n"
    },
    {
      "commit": "c928de90ad22ecdf83c18a07008409595f13d3b1",
      "tree": "065a08f379960f7ba946318aaa742d7ddd0c94bd",
      "parents": [
        "0f827169742aad6209d830db773a101849c32a83"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 27 14:30:44 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 27 14:30:44 2013 -0800"
      },
      "message": "Remove Iceland.\n\nART_USE_LLVM_COMPILER is removed and when necessary ART_USE_PORTABLE_COMPILER\nis used in #ifdefs.\n\nChange-Id: Iffa9ce5b0246c7c427ccc4e67ecc134624632e55\n"
    },
    {
      "commit": "2dd0e2cea360bc9206eb88ecc40d259e796c239d",
      "tree": "9d619dc9508cbe73e4793bf6f08cbc761abfb48a",
      "parents": [
        "ac21b797b3a425975d656d6b84a7b24401d35f42"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 24 12:42:14 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jan 30 16:48:31 2013 -0800"
      },
      "message": "Directory restructuring of object.h\n\nBreak object.h into constituent files.\nReduce number of #includes in other GC header files.\nIntroduce -inl.h files to avoid mirror files #include-ing each other.\nCheck invariants of verifier RegTypes for all constructors.\n\nChange-Id: Iecf1171c02910ac152d52947330ef456df4043bc\n"
    },
    {
      "commit": "7a22fa657b972e8323692368975bc5a7be1cc0f5",
      "tree": "4fe55837daae4e252eeaccf1be931f2e7ed434cb",
      "parents": [
        "87b185f3bfd766001dcd5977fc0ee0489e5a8a28"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jan 23 12:16:16 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jan 23 12:21:05 2013 -0800"
      },
      "message": "Refactor StackVisitor to take a Thread*.\n\nThis allows assertion checking on the thread, principally that we never try to\nwalk the stack of an unsuspended thread.\nFix bug in the OwnedMonitorVisitor where GetVReg could be called on a\nStackVisitor with no context.\n\nChange-Id: I06539b624b253b6fb7385e7be11a4bced1d417b2\n"
    },
    {
      "commit": "306057fd278d75bf3794bd5243a3b6652c487d18",
      "tree": "62652a97caace11e50408d15688ced3514039219",
      "parents": [
        "2d76b041be770102fc912effc398e629a18180d2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 26 12:45:53 2012 -0800"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Jan 02 11:15:42 2013 -0800"
      },
      "message": "Support for deoptimization needed for debugging.\n\nThe deoptimization code is untested, and some sanity checks in the\ninstrumentation are disabled because they need debugging.\n\nChange-Id: I1b60a65a60bddc9b107ad4659da097b55ce901c3\n"
    },
    {
      "commit": "761600567d73b23324ae0251e871c15d6849ffd8",
      "tree": "4757cb01233394fa2e9c461a68fc37a35c12dabb",
      "parents": [
        "89c41e5f2fa10e7b97698b9714bd4883a73132f0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 12 16:31:20 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 12 16:31:20 2012 -0800"
      },
      "message": "Switch over to the google3 unix_file File*.\n\nI also moved macros.h to base/macros.h to ease google3 porting, at\nthe expense of a larger than necessary change. (I learned my lesson,\nthough, and didn\u0027t make the equivalent base/logging.h change.)\n\nI\u0027m not sure whether we want to keep the unix_file MappedFile given\nour existing MemMap, but it\u0027s easier to bring it over and then remove\nit (and possibly revert the removal) than to bring it over later.\n\nChange-Id: Id50a66faa5ab17b9bc936cc9043dbc26f791f0ca\n"
    },
    {
      "commit": "725a957985171d712d5c048cc3d00ff14968784b",
      "tree": "3bd4b161268ecd477aa471665316fb27a3dda145",
      "parents": [
        "35883cc623fdf475a4ead1dafcba9e9becc1ed11"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Tue Nov 13 18:20:12 2012 -0800"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Nov 14 11:42:33 2012 -0800"
      },
      "message": "Pulled out instrumentation into its own class separate from trace.\n\nThis is in preparation for Ian\u0027s debugger changes. The instrumentation\nstill needs support for debugging, which I\u0027ll add later.\n\nChange-Id: I29ce0af1ff2eaec8f6d2f54963263381363ebf72\n"
    }
  ]
}
