)]}'
{
  "log": [
    {
      "commit": "ded66a01f81812e0129d17c3d08d5eda18433062",
      "tree": "74a3f7bad1c020b0136d6c173633a361a479f5cb",
      "parents": [
        "e0205d519dd417f749243b42b8711dfa313e5390"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 28 18:12:55 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 28 18:36:32 2014 -0700"
      },
      "message": "Move MethodHelper::GetReturnType to mirror::ArtMethod.\n\nAlso, fix missing handle in HasSameSignatureWithDifferentClassLoaders.\n\nChange-Id: I9e1ffd09be950ecc8346fc3c485760d82d9ecab3\n"
    },
    {
      "commit": "6786a58659420c0631a1ebe1f2fde434b8bcd1e4",
      "tree": "e16ea4abe8dc115955a63828d682e5910e277c5e",
      "parents": [
        "e1e084034ed1dd0e3928f0d10dc0cebf80171c07"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 28 12:49:06 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 28 12:49:06 2014 -0700"
      },
      "message": "Remove ResolveString from MethodHelper.\n\nChange-Id: Ice0fff0680f876285539f78cd79d520d424e2f5e\n"
    },
    {
      "commit": "647b1a86f518d8db0331b3d52a96392b7a62504b",
      "tree": "7370f795ef3c7fbdd2695d23bc6f8171f40f43f1",
      "parents": [
        "acfbbd4df2fc1c79a7102587bebf398f95b5e5de"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 10 11:02:11 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 10 12:26:02 2014 -0700"
      },
      "message": "Fix 2 new sets of clang compiler warnings.\n\nFix issues that are flagged by -Wfloat-equal and -Wmissing-noreturn.\nIn the case of -Wfloat-equal the current cases in regular code are deliberate,\nso the change is to silence the warning. For gtest code the appropriate fix is\nto switch from EXPECT_EQ to EXPECT_(FLOAT|DOUBLE)_EQ.\nThe -Wmissing-noreturn warning isn\u0027t enabled due to a missing noreturn in\ngtest. This issue has been reported to gtest.\n\nChange-Id: Id84c70c21c542716c9ee0c41492e8ff8788c4ef8\n"
    },
    {
      "commit": "832336b3c9eb892045a8de1bb12c9361112ca3c5",
      "tree": "0e8696869a28ee0dee34d130b586b1bf6f072d6e",
      "parents": [
        "f1f05d303988a5c071c87b760056be8358276c94"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 15:35:22 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 16:00:31 2014 -0700"
      },
      "message": "Don\u0027t copy fill array data to quick literal pool.\n\nCurrently quick copies the fill array data from the dex file to the literal\npool. It then has to go through hoops to pass this PC relative address down\nto out-of-line code. Instead, pass the offset of the table to the out-of-line\ncode and use the CodeItem data associated with the ArtMethod. This reduces\nthe size of oat code while greatly simplifying it.\nUnify the FillArrayData implementation in quick, portable and the interpreters.\n\nChange-Id: I9c6971cf46285fbf197856627368c0185fdc98ca\n"
    },
    {
      "commit": "7b078e8c04f3e1451dbdd18543c8b9692b5b067e",
      "tree": "414229c6b87eb20ea24c40780752da5a3999a49a",
      "parents": [
        "f79ba17defbd9342e44ab9f3de0807054673d3c9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 10 14:44:24 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 12 14:57:53 2014 -0700"
      },
      "message": "Compile time performance improvements focusing on interpret-only.\n\nReduce virtual method dispatch in the method verifier and make more code\ninline-able.\nAdd a StringPiece with const char* equality operator to avoid redundant\nStringPieces and strlens.\nRemove back link from register line to verifier and pass as argument to reduce\nsize of RegisterLine.\nRemove instruction length from instruction flags and compute from the\ninstruction, again to reduce size.\nAdd suspend checks to resolve and verify to allow for more easy monitor\ninflation and reduce contention on Locks::thread_list_suspend_thread_lock_.\nChange ThrowEarlierClassFailure to throw pre-allocated exception.\nAvoid calls to Thread::Current() by passing self.\nTemplate specialize IsValidClassName.\nMake ANR reporting with SIGQUIT run using checkpoints rather than suspending\nall threads. This makes the stack/lock analysis less lock error prone.\nExtra Barrier assertions and condition variable time out is now returned as a\nboolean both from Barrier and ConditionVariable::Wait.\n\n2 threaded host x86-64 interpret-only numbers from 341 samples:\nBefore change: Avg 176.137ms 99% CI 3.468ms to 1060.770ms\nAfter change: Avg 139.163% 99% CI 3.027ms to 838.257ms\nReduction in average compile time after change is 20.9%.\nSlow-down without change is 26.5%.\n\nBug: 17471626 - Fix bug where RegTypeCache::JavaLangObject/String/Class/Throwable\ncould return unresolved type when class loading is disabled.\nBug: 17398101\n\nChange-Id: Id59ce3cc520701c6ecf612f7152498107bc40684\n"
    },
    {
      "commit": "37f05ef45e0393de812d51261dc293240c17294d",
      "tree": "7c7793862efa52e1deb42babbdcb652c245ab941",
      "parents": [
        "e25826e28ea65d9c1aa23f84788a091c677b20c7"
      ],
      "author": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Wed Jul 16 18:38:08 2014 -0700"
      },
      "committer": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Mon Aug 25 11:16:53 2014 -0700"
      },
      "message": "Reduced memory usage of primitive fields smaller than 4-bytes\n\nReduced memory used by byte and boolean fields from 4 bytes down to a\nsingle byte and shorts and chars down to two bytes. Fields are now\narranged as Reference followed by decreasing component sizes, with\nfields shuffled forward as needed.\n\nBug: 8135266\nChange-Id: I65eaf31ed27e5bd5ba0c7d4606454b720b074752\n"
    },
    {
      "commit": "1ff3c98775a4577cf053dba9a0c2d5c21c07b298",
      "tree": "2d09c27c69678b53b4c9dc486024f3547efd4bca",
      "parents": [
        "99c251bbd225dd97d0deece29559a430b12a0b66"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 12 02:30:58 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 12 16:08:05 2014 -0700"
      },
      "message": "Avoid use of std::string where we have const char*.\n\nRemoving the ClassHelper caused std::string creation for all calls to\nClass::GetDescriptor and a significant performance regression. Make the\nstd::string an out argument so the caller can maintain it and its life time\nwhile allowing GetDescriptor to return the common const char* case.\n\nDon\u0027t generate GC maps when compilation is disabled.\n\nRemove other uses of std::string that are occuring on critical paths.\nUse the cheaper SkipClass in CompileMethod in CompilerDriver.\nSpecialize the utf8 as utf16 comparison code for the common shorter byte\nencoding.\nForce a bit of inlining, remove some UNLIKELYs (they are prone to pessimizing\ncode), add some LIKELYs.\n\nx86-64 host 1-thread interpret-only of 57 apks:\nBefore: 29.539s\nAfter: 23.467s\n\nRegular compile:\nBefore: 1m35.347s\nAfter: 1m20.056s\n\nBug: 16853450\nChange-Id: Ic705ea24784bee24ab80084d06174cbf87d557ad\n"
    },
    {
      "commit": "4e99b3d8955131f3fc71aa113f0fa71f0092cb6f",
      "tree": "bcaf4e5119a74c836d8598e064a20cdead757efb",
      "parents": [
        "5fa647d5f663033e4ed3d398aece1f8211d7f460"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 24 14:35:40 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jul 10 17:03:15 2014 +0200"
      },
      "message": "Add missing class initialization during compilation and tests\n\nAdds missing class initialization during compilation and tests, especially\njava.lang.Class. Otherwise, we\u0027d be able to execute code while the referring\nclass is not initialized or initializing.\n\nAlso adds mirror::Class::AssertInitializedOrInitializingInThread method to\ncheck class initialization when entering the interpreter: the called method\u0027s\ndeclaring class must either be initialized or be initializing by the current\nthread (other threads must be waiting for the class initialization to complete\nholding its lock). Note we only do this check in debug build.\n\nBump oat version to force compilation.\n\nBug: 15899971\nChange-Id: I9a4edd3739a3ca4cf1c4929dcbb44cdf7a1ca1fe\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": "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": "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": "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": "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": "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": "f6e4a59cf58471ba69b0eafb34b3a43b2b95caa1",
      "tree": "ca1f63c18fd92a085c1456174494b01bf7dc5787",
      "parents": [
        "6cddafbdd4b092565664195a25256b907f5d2ccd",
        "ee1997a3b83334985e757f369c09e111b121661b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Oct 17 15:10:52 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 17 15:10:53 2013 +0000"
      },
      "message": "Merge \"Improve interpreter handler table management.\" into dalvik-dev"
    },
    {
      "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": "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": "cdf2d4cbbb1d0cf3e9f80d3dca609a3435c74427",
      "tree": "8c528f54d745d2ba166e749f81c9d1ca78987d4b",
      "parents": [
        "174e9192843002a98e2d2ed26031e83f944645d1"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Sep 13 14:57:51 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Sep 13 18:00:02 2013 +0200"
      },
      "message": "Update interpreter handler table after invoke.\n\nAnd introduce UPDATE_HANDLER_TABLE macro to reduce copy \u0026 paste.\n\nChange-Id: I9ea7565df0db2b44581d0e6bcefb5f104e76ed01\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"
    }
  ]
}
