)]}'
{
  "log": [
    {
      "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": "3035961cb41865b80b927546be0c708b6389cec6",
      "tree": "27ed39f92c013381d08c7ad51d311cb29be230dc",
      "parents": [
        "e21bf0099117b82963cdf7f95a1b8dabfcf29397"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 21 17:46:23 2014 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jun 06 16:13:42 2014 -0700"
      },
      "message": "Clean up and augment Atomic class.  Replace QuasiAtomic MemBars.\n\nAdd a number of missing C++11 operations to Atomic class.\nInvoke the 64 bit routines in QuasiAtomic when necessary.\nReplace QuasiAtomic membars with fences that correspond to C++11 fences.\n\nQuasiAtomic was moved to the top of the file.  Only fence implementations\nactually changed.\n\nThis replaces some buggy uses of MembarStoreStore, as reported\nin b/14685856 .\n\nAvoid some redundant fences for long volatile operations.\n\nIncompletely converts low-level memory access operations to Atomic.\n\nChange-Id: Iea828431a0cea46540eb74fcaa02071cab6fdcda\n"
    },
    {
      "commit": "3c5aec1da27d8068e6bb97202d12efad6b4331df",
      "tree": "d3a0dda8ab64456aabba18143eaf123e34e1d238",
      "parents": [
        "fbc3e0baa16f265a5dbc99a38383b4dbc41b04a8"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 04 09:41:21 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 04 09:41:21 2014 +0200"
      },
      "message": "Add missing preamble in switch-based interpreter\n\nAdds missing preamble for CONST_WIDE_HIGH16 instruction.\n\nChange-Id: I80371d6f5e5d1b60c88837706dc139782776eefa\n"
    },
    {
      "commit": "da843e11bd5f2177a776c37de033228a7ea230af",
      "tree": "1d63ac9fdf4c9574571c8321f113d6beb29e0fe9",
      "parents": [
        "8b5b1e5593ffa77c393e4172b71a3d5a821d2ed8"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed May 28 19:28:31 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed May 28 19:28:53 2014 +0200"
      },
      "message": "Another workaround for stack overflow issue with clang\n\nBug: 14882674\nChange-Id: I465fda533714021b39b847afe89e454758646b47\n"
    },
    {
      "commit": "1526c30fff72b6c600b63aebe05d5c4f65c8a29b",
      "tree": "51768c2694d1153593721907304f51b6a6c0a434",
      "parents": [
        "4996f1191cd3d5edf85981d6412aa129da2dcd06",
        "5c0049067a953d7a2383d3064a84a32d1efa3a24"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu May 22 06:52:00 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 22 06:52:01 2014 +0000"
      },
      "message": "Merge \"Secure move-exception in intepreter\""
    },
    {
      "commit": "5c0049067a953d7a2383d3064a84a32d1efa3a24",
      "tree": "be0377c1348c8aea84a7308fd5977657b8f3622d",
      "parents": [
        "bf17a08fb48fa296acb09904d4c10ba42f63f55d"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed May 21 10:07:42 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed May 21 10:08:31 2014 +0200"
      },
      "message": "Secure move-exception in intepreter\n\nCopies exception into the shadow frame before clearing it from its thread so\nit\u0027s always reachable.\n\nChange-Id: Ifdc68280424f5099aacf0724da94889881a99551\n"
    },
    {
      "commit": "82aeddb83c58db5fe1e227de574eb8ced4fc6130",
      "tree": "7eba89c01108035999fcbd8df7bbba62472814c6",
      "parents": [
        "da69b35b1cf63d01f337ebc36aad1edee1bcc06a"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue May 20 20:09:45 2014 +0200"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 20 14:04:33 2014 -0700"
      },
      "message": "Workaround stack overflow issue with clang\n\nBug: 14882674\nChange-Id: I633251eb5229f0a65c27c6d771a7ff21f616a0f3\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": "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": "2fa98e26ddd71ca147869b84fc117751ae6ca92a",
      "tree": "543eb93b8e903cf199078e827129728898b6172d",
      "parents": [
        "47ebd77a6d249403a34d242908749b7446da2a82"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue May 06 15:26:39 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue May 06 15:26:39 2014 -0700"
      },
      "message": "Fix typo.\n\nChange-Id: I733f83bf8577d3fb41534faaf241f1f120870bec\n"
    },
    {
      "commit": "b2c7ead6bb5c98282cdfbc89db8984a004bea030",
      "tree": "8c7ca6ea7d57863b60e3f3afac88cb186396aea3",
      "parents": [
        "be4706907e226959623c0fb4937cf3979f440a97"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 29 11:13:16 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 30 11:55:39 2014 -0700"
      },
      "message": "Don\u0027t allow allocating finalizable objects during transactions.\n\nIt doesn\u0027t make sense to allocate finalizable objects during a\ntranscation since they will never get finalized without a started\nruntime.\n\nBefore StatusInitialized in core.host.oatdump.txt: 3564\nAfter StatusInitialized in core.host.oatdump.txt: 3564\n\nBug: 14078487\n\nChange-Id: I7070536f7bb87bfc691d4268bd39a3eca492f48e\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": "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": "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": "abff6439db28fbbed95490bfff7e24d1fdf5b771",
      "tree": "6ed749056b1d2e29f2bdf81c13e80e15849e9836",
      "parents": [
        "7ea5dafc81b2bba7cabad26130bb75dc8f709803"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jan 27 18:01:39 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jan 28 18:18:14 2014 +0100"
      },
      "message": "Refactor array access for the interpreter.\n\nAdds GetWithoutChecks and SetWithoutChecks methods in PrimitiveArray and use\nthem in the interpreter. Updates Get and Set methods to rely on them and adds\nsome DCHECK to control exception flow.\n\nRenames IsValidIndex into CheckIsValidIndex to reflect it can throw an\nexception. It\u0027s also more consistent with ObjectArray::CheckIsAssignable.\n\nMake ThrowArrayIndexOutOfBoundsException private in Array since it\u0027s only used\nby Array::CheckIsValidIndex.\n\nUpdates DoFilledNewArray to use SetWithoutChecks rather than Set.\n\nChange-Id: I2fd314d77a67cf969843d499b86d04ca7b7a43e6\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": "e861ebd5d9490cc86200f3859f3d36fadad4588c",
      "tree": "be9ad31a9175198758491e6bcd3eef5c252c2c38",
      "parents": [
        "d50f8c8e4456263e169c9998d3a1c3a6c5c51435"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 09 15:01:21 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 09 15:17:12 2013 -0700"
      },
      "message": "Fix interpreter bugs.\n\nThese showed up in compaction work.\n\nChange-Id: Iac8eb0a1395c25aabba9f2e0ff6b01fc6180bdca\n"
    },
    {
      "commit": "253ea073ec03a0be1e22df98957257594e316a39",
      "tree": "804fbc5b00ef7d0b399aa70960793ce5b50eb2ae",
      "parents": [
        "7ef126ce0593929bcf8fb73d8b1119ce3b95b3f2"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Oct 02 12:44:17 2013 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Oct 02 13:34:17 2013 -0700"
      },
      "message": "Fix an Art debug build boot failure.\n\n(The original change is 3b4c18933c24b8a33f38573c2ebcdb9aa16efeb5.)\n\nBug: 11003273\nBug: 9986565\nChange-Id: Iaaf6395f171eb6e6b8c99386c20c4970c53ee00d\n"
    },
    {
      "commit": "c67148594b1580c278ae71e3ce5c6fd59bfa6bd3",
      "tree": "4413606a3c8d0d8426c891574047c9256a43abda",
      "parents": [
        "a95be97148b2b2c5095cf80edbebaa771202290e"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 30 16:42:32 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 30 18:17:05 2013 +0200"
      },
      "message": "Enable thread analysis on template functions.\n\nAll template functions using thread analysis must be explicitly instantiated\nwith the thread analysis attributes to enable thread analysis. We use macros\nto do this since there are many variants of a same function depending the\nnumber of template arguments.\n\nAlso add documentation of these functions.\n\nChange-Id: I3c79acc2f0a6a8dfb5c42924439145292dd68812\n"
    },
    {
      "commit": "c61124bdeaae94f977ffc36ac69535e792c226f2",
      "tree": "41ba8619a6dea88a8c607836db21531b05a3787a",
      "parents": [
        "7541c745e00b49983f277d6b6b18bc4c174c7e39"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 10 11:44:19 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 30 08:57:33 2013 +0200"
      },
      "message": "Cleanup invoke in interpreter.\n\nSome cleanup in invocation stuff:\n- Get the number of invoke arguments from instruction (vA) rather than get it\nfrom its code item. This benefits to native invoke since we no longer need to\nparse the method\u0027s shorty. Also pass the low 16 bits of instructions to avoid\nfetching it twice when reading vA.\n- Remove \"is_static\" tests by taking advantage of invoke type template argument\nrather than testing method\u0027s access flags.\n- Ensure Instruction::GetArgs is inlined.\n- Check exception when initializing method\u0027s class when transitioning from\ninterpreter to compiled code (artInterpreterToCompiledCodeBridge).\n- Move UnstartedRuntimeInvoke function to interpreter_common.cc and make it\nstatic as it\u0027s only used by DoInvoke and DoInvokeVirtualQuick functions.\n- Avoid duplicating code in ShadowFrame::Create.\n\nPerformance remains the same according to benchmarks. Hopefully, this should be\naddressed in next CLs, especially by improving new shadow frame initialization.\n\nBug: 10668955\nChange-Id: I514b8f098d0ef3e35921ceb770383aac1a9c7902\n"
    },
    {
      "commit": "a3faaf4bece7f42529c013fe87bd41de59798656",
      "tree": "933e312a4aa4d69b2d7da7eda4d592419cec4729",
      "parents": [
        "a9a624b2be2180e6bd33f02c89fb8521376a2e8c"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Sep 03 19:07:00 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Sep 24 15:18:36 2013 -0700"
      },
      "message": "Fix handling of unresolved references in verifier.\n\nThe verifier should not treat use of unresolved references as a reason to reject\nthe entire class. Instead, the verifier treats the instruction as a throw. If\nthat class is run, the interpreter with extra checks will throw an exception.\n\nBug: 10457426\n\nChange-Id: I3799da843a7ffb3519bbf6dc13a6276519d9cb95\n"
    },
    {
      "commit": "450dcb56ecbf6f729401e753f0a27e4170177ddd",
      "tree": "f596d57c5f6fbdc90b3dc68a2008e38ee48e2882",
      "parents": [
        "810b1d704f2db0d935bf5dddae3545f79cabd435"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 20 17:36:02 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 20 18:47:39 2013 -0700"
      },
      "message": "Improve float to integral conversion.\n\nChange-Id: I1597083cb2c04084ce825fe2e3c753fde8309cd8\n"
    },
    {
      "commit": "3b588e09eac6fb2aff64595e2232e479703850fc",
      "tree": "6a6608e3fa027631715e3da671859daed222c6f2",
      "parents": [
        "3523909c99a27729d9a0d6fe3624f09dfadf351c"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Sep 11 14:33:18 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Sep 18 09:24:45 2013 +0200"
      },
      "message": "Optimize instruction data fetch in interpreter.\n\nThe computed goto implementation prevents the compiler from detecting we are\nloading the first 16 bits of instruction twice: first one to get the opcode and\nsecond one to fetch first instruction\u0027s operand(s) like vA and vB.\n\nWe now load the 16 bits into a local variable and decode opcode and operands\nfrom this variable. And do the same in the switch-based implementation for\nconsistency.\n\nThe performance improvement is 5% in average on benchmark applications suite.\n\nAlso remove unused \"Thread* self\" parameter from DoIGetQuick and DoIPutQuick.\n\nBug: 10703860\nChange-Id: I83026ed6e78f642ac3dcdc6edbb6056fe012005f\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": "043036f67fa37b3cfa3b05c41e5a824058730378",
      "tree": "c3969fac77984ae17f11c284c757ef929693509b",
      "parents": [
        "1eda2268e84d384256814cb6c2ba2440a848f9ed"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 09 18:26:48 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 09 20:42:21 2013 +0200"
      },
      "message": "Add missing memory barrier.\n\nWhen DEX-to-DEX compiler is not run onto a method (because it\u0027s not preverified\nat the time of compilation), we do not replace RETURN where a barrier is needed\ninto RETURN_VOID_BARRIER.\nThis CL fixes this by placing a barrier on RETURN instruction only when the\nchecks are enabled (non-preverified method).\n\nChange-Id: I4eb4cf79bb4a74684579c578318e27f62f4d9e8a\n"
    },
    {
      "commit": "1eda2268e84d384256814cb6c2ba2440a848f9ed",
      "tree": "b005fcb72a3ce69784ac43e176464ca1b8f49d8a",
      "parents": [
        "7095c6546e03eba2076edcf628b947179c975cb3"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 09 16:53:14 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 09 18:11:15 2013 +0200"
      },
      "message": "Move thread suspend check at safepoints.\n\nMove CheckSuspend on backward branch, return and exception handling.\n\nBug: 10603072\nChange-Id: Ic6c2c5066f133a345323d46edca7afde350849d8\n"
    },
    {
      "commit": "8ece050d85fc244c72610244e440b0e00aa618fa",
      "tree": "6f9c9a909fc5c2cdf9cd4ba5c285381be39cc370",
      "parents": [
        "28c2300d9a85f4e7288fb5d94280332f923b4df3"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Aug 07 11:26:41 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 09 17:40:11 2013 +0200"
      },
      "message": "Add an interpreter using computed goto table.\n\nThis CL adds a new implementation of the interpreter using computed goto table.\nIn order to keep the switch-based implementation, it reorders things as the\nfollowing:\n- Keep interpreter entrypoints into interpreter.h/.cc files.\n- Move common interpreter parts to interpreter_common.h/.cc files.\n- Separate both implementations to their own modules.\n\nThe interpreter implementation can be selected by changing the value of the\nkInterpreterImplKind global variable (see interpreter.cc file). The default one\nremains the switch-based implementation.\n\nAlso updates the exception handling (FindNextInstructionFollowingException) and\nSPARSE_SWITCH switch handling (DoSparseSwitch) routines to share code between both\nimplementations.\n\nFinally, adds a PACKED_SWITCH handling routine (DoPackedSwitch) so we are\nconsistent with SPARSE_SWITCH handling.\n\nThe computed goto implementation use two handlers table: one for normal\ninstruction handling and one for instrumentation handling. The current handlers\ntable to be used is updated on backward branch depending on whether there is\nlistener to DEX pc change.\n\nBug: 10602809\nChange-Id: Ibb53bcc68be75c473fe5440835e78fc9a74381b3\n"
    }
  ]
}
