)]}'
{
  "log": [
    {
      "commit": "9fc16eb43fe938f0cddb13638bd7cbc2ea9534a2",
      "tree": "42be6682a5c6540c944a37c62f82c5635ab9e81e",
      "parents": [
        "0418ae2bdd996b64f733b1290080e3f98a05609f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jul 31 14:49:16 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jul 31 14:52:50 2013 -0700"
      },
      "message": "Don\u0027t add barriers to clinit methods.\n\nChange-Id: I13e6c008feb8c19e452d6e2f88b2bbbcac997de5\n"
    },
    {
      "commit": "c449aa8151bf81d93d22ff24677ccf09a6da218e",
      "tree": "343274bb1e635bc503ae0ffc44c68ec44f6b69e5",
      "parents": [
        "c95d6b1cb35b382804b9a310d32f66059eca65d9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jul 29 14:35:46 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jul 29 14:45:07 2013 -0700"
      },
      "message": "Clear exception if catch block doesn\u0027t have move-exception.\n\nBug: 10040419\n\nChange-Id: Icc7a55cb3cdfbc3efd2b161bbe22b3e5007de35f\n"
    },
    {
      "commit": "4221d61630ba9f5e386f0e13e40aa33a51a2b6ed",
      "tree": "b4c9a2df24db78b1c47625574d6e3dc91f31b1ff",
      "parents": [
        "024a7276735f0cdd4ff5691a12e698cc7c527d5f",
        "46a1270fad27d81904ed60d0df56761356af500d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sun Jul 28 00:43:02 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jul 28 00:43:02 2013 -0700"
      },
      "message": "am 46a1270f: Revert \"Support inline dex data\"\n\n* commit \u002746a1270fad27d81904ed60d0df56761356af500d\u0027:\n  Revert \"Support inline dex data\"\n"
    },
    {
      "commit": "024a7276735f0cdd4ff5691a12e698cc7c527d5f",
      "tree": "4348bf588e7cd427cf91d6bf8001fb3fa8d3b933",
      "parents": [
        "ecde136fb42c38cf9928982605abfcd6de46d86a",
        "64d8f18c94b23cb4ff908304aef4d9f3f5a85f39"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Jul 28 00:43:02 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jul 28 00:43:02 2013 -0700"
      },
      "message": "am 64d8f18c: Merge \"Support inline dex data\"\n\n* commit \u002764d8f18c94b23cb4ff908304aef4d9f3f5a85f39\u0027:\n  Support inline dex data\n"
    },
    {
      "commit": "46a1270fad27d81904ed60d0df56761356af500d",
      "tree": "43f3acd8af7fd34d4ae7b64f6e06bb8429d74bb8",
      "parents": [
        "64d8f18c94b23cb4ff908304aef4d9f3f5a85f39"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat Jul 27 14:36:07 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat Jul 27 14:36:07 2013 -0700"
      },
      "message": "Revert \"Support inline dex data\"\n\nThis reverts commit 728328a441c6d3172283f3e44d120550997b5887.\n"
    },
    {
      "commit": "64d8f18c94b23cb4ff908304aef4d9f3f5a85f39",
      "tree": "48d5244620d5b5dcc99820a8879b455aa6fd4677",
      "parents": [
        "7934ac288acfb2552bb0b06ec1f61e5820d924a4",
        "728328a441c6d3172283f3e44d120550997b5887"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jul 26 23:47:18 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 26 23:47:18 2013 +0000"
      },
      "message": "Merge \"Support inline dex data\""
    },
    {
      "commit": "728328a441c6d3172283f3e44d120550997b5887",
      "tree": "886013afb34df67fa7d5feae0d007a508ec950d1",
      "parents": [
        "23d5cffcb8e32aaa6ce0895ade28849f72d90463"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jul 26 16:26:08 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jul 26 16:46:14 2013 -0700"
      },
      "message": "Support inline dex data\n\nDx always places switch table and array data following executable\ncode.  However, embedding data inline appears to be legal - and\nthe Garmin Connect app does this.  Unknown is what tool generated\nthe odd dex code.  This CL reworks dex parsing to support inline data.\n\nFurther, a verification check to require a move-exception at\nthe beginning of catch regions is disabled.  Dalvik\u0027s verifier appears\nto only require that if a move-exception exists, it must be at\nthe beginning of the catch.  If there is value to the check\nrequiring a move-exception, we\u0027ll need to enable it based on a\nfuture dex version.\n\nChange-Id: I80c78544993acb999f7c62d32479c3c8455b56cb\n"
    },
    {
      "commit": "0f055d11096cb02563e9c040cd03c791fd8f69a3",
      "tree": "8c7e730f17174ab4e11786fde1c2a05c7039d507",
      "parents": [
        "93c3396f8b33539489763ebdfafcedb4127009d9",
        "7934ac288acfb2552bb0b06ec1f61e5820d924a4"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 12:46:02 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 12:47:51 2013 -0700"
      },
      "message": "resolved conflicts for merge of 7934ac28 to dalvik-dev\n\nChange-Id: I8798a6f154463d3f92f6aca62f14130aec82d273\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": "93c3396f8b33539489763ebdfafcedb4127009d9",
      "tree": "ee31a41dc2365cd1bca83ee8b435bc5c6f1ca909",
      "parents": [
        "7a40f059c9d118c0d94716358297bd61bc6d1bf3"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 10:37:43 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 10:37:43 2013 -0700"
      },
      "message": "Fix style issues in MethodVerifier\n\nChange-Id: I3aa5929311863e40840acebc5efafecb949fdea5\n"
    },
    {
      "commit": "4d4adb1dae07bb7421e863732ab789413a3b43f0",
      "tree": "a0c7861c64f193065264478af397929be473184c",
      "parents": [
        "56eb9bc9da8d3863fef02891c2f4f2e4d996204d"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jul 24 16:14:19 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jul 26 10:24:55 2013 +0200"
      },
      "message": "Prevent verifier from creating unused compilation data.\n\nThe verifier used to create data which may be unused like GC map. This is the\ncase for non-compiled method (which are interpreted). This CL aims to optimize\nthis.\n\nHere are the changes:\n- Move compilation selection to MethodVerifier::IsCandidateForCompilation.\n- Compiler and verifier use this method to know if a method must be compiled.\n- Only create compilation data while compiling using Runtime::IsCompiler.\n- Do not create internal structures concerning GC map, ... in Runtime::Init and\nRuntime::Shutdown when we are not compiling.\n- Checks we are compiling when accessing these structures.\n- Add missing destruction of MethodVerifier::safecast_map_lock_ and\nMethodVerifier::safecast_map_ in Runtime::Shutdown.\n- Call Runtime::Shutdown just before Runtime instance is destroyed to avoid a\ncrash.\n- Add missing \"GUARDED_BY\" macro for MethodVerifier::rejected_classes_ field.\n- Add \"has_check_casts\" to avoid the safecast pass if there is no check-cast\ninstruction.\n- Add \"has_virtual_or_interface_invokes\" to avoid the devirtualization pass if\nthere is no invoke-virtual/range nor invoke-interface/range instructions.\n\nBug: 9987437\nChange-Id: I418ee99f63e4203409cf5b7d2c2295b22fcf24c1\n"
    },
    {
      "commit": "b8c7859f21f5ae4c9b90f2ef2effc51967299737",
      "tree": "7f7c06a648a8fe8b134cee82111935f27b1606b0",
      "parents": [
        "be576f48e4bf5c2afcaadd6e3a6d0f6a3153f031"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 25 23:52:52 2013 +0000"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 25 17:35:15 2013 -0700"
      },
      "message": "Revert \"Revert \"Remove non-live vregs from GC map on return.\"\"\n\nThis reverts commit 73dda0bc2adcd6a3a7d75f663a3559f8b527d485.\nIt also fixes the problematic line in the ReferenceMap test.\n\nChange-Id: Ic3b62db7c040853a5ddfed589f6e0acff25d82b7\n"
    },
    {
      "commit": "73dda0bc2adcd6a3a7d75f663a3559f8b527d485",
      "tree": "fc83c823a67a5e259dc19d81f9cba6b147124cf0",
      "parents": [
        "c0d120a0b1389f1f402d13e20b9e4abd9ab7cd95"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jul 24 23:46:43 2013 +0000"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jul 24 23:46:43 2013 +0000"
      },
      "message": "Revert \"Remove non-live vregs from GC map on return.\"\n\nThis change causes a test regression on the oat tests, back out until the change also updates the test for the new GC map values.\n\nThis reverts commit c0d120a0b1389f1f402d13e20b9e4abd9ab7cd95.\n\nChange-Id: I48bc951b1dad9a9ae83cccf0b5b68ad60fac052c\n"
    },
    {
      "commit": "c0d120a0b1389f1f402d13e20b9e4abd9ab7cd95",
      "tree": "fefb6e74d0bf3e4a48a6e0f58ca7a11ce3f0a098",
      "parents": [
        "db06306be76bcea3aabab2cecfb16ae2af542801"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 23 18:16:21 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 23 18:36:24 2013 -0700"
      },
      "message": "Remove non-live vregs from GC map on return.\n\nMark registers going into a return as conflict/bottom so that they aren\u0027t\nconsidered for GC maps and deoptimization.\n\nBug 4191345.\n\nChange-Id: I8af6c21824b6459788852be5417849e8ef999bcb\n"
    },
    {
      "commit": "6d376aec61fc57b4caa840c1ae309e4f4f589792",
      "tree": "196b8cd13874ebc6a99924b7cb86eba6cf02e36d",
      "parents": [
        "a3d6b8cb884fce2fe34258e9d582b11ea9545fd9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 23 15:12:40 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 23 15:12:40 2013 -0700"
      },
      "message": "Tidy ws and document verifier instruction flags.\n\nChange-Id: I6c58a76f3373b17fc001480c4db069fc942fce3a\n"
    },
    {
      "commit": "02c8cc6d1312a2b55533f02f6369dc7c94672f90",
      "tree": "4e4a268e8cb82dcd95f8e29a8169b0396e20b0cc",
      "parents": [
        "6f485c62b9cfce3ab71020c646ab9f48d9d29d6d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 15:54:44 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 16:02:33 2013 -0700"
      },
      "message": "Fixing cpplint whitespace/blank_line, whitespace/end_of_line, whitespace/labels, whitespace/semicolon issues\n\nChange-Id: Ide4f8ea608338b3fed528de7582cfeb2011997b6\n"
    },
    {
      "commit": "1895ea386ca78573302483f589ebabd8ce1480e7",
      "tree": "d8c2d27ac746f29c8248fe17fd6b8e9872556fc4",
      "parents": [
        "3e3d591f781b771de89f3b989830da2b6ac6fac8"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 13:28:37 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 14:38:27 2013 -0700"
      },
      "message": "Fix cpplint readability/fn_size issues\n\nChange-Id: I1efdb07a948a2af49db1a9d21ccab16dacc03a54\n"
    },
    {
      "commit": "df62950e7a32031b82360c407d46a37b94188fbb",
      "tree": "038bf95a2ce296ae3e0c30a131ac22c0986f0f52",
      "parents": [
        "0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 22:39:56 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 00:13:18 2013 -0700"
      },
      "message": "Fix cpplint whitespace/parens issues\n\nChange-Id: Ifc678d59a8bed24ffddde5a0e543620b17b0aba9\n"
    },
    {
      "commit": "0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c",
      "tree": "525a0f99f9381156367c988133b5d51d5dfef6f7",
      "parents": [
        "f69863b3039fc621ff4250e262d2a024d5e79ec8"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 23:40:20 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 00:12:43 2013 -0700"
      },
      "message": "Fix cpplint whitespace/blank_line issues\n\nChange-Id: Ice937e95e23dd622c17054551d4ae4cebd0ef8a2\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": "1581766afea0b31de0ed0f9f677fc3b92a29daae",
      "tree": "78793c270596134e5848dda3af66e674a7160017",
      "parents": [
        "3d76933675895667f212500a65c9c7ea2b6209fc",
        "51c2467e8771b56e25ae4f17f66522f979f57a7e"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 08:50:57 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 08:50:57 2013 -0700"
      },
      "message": "resolved conflicts for merge of 51c2467e to dalvik-dev\n\nChange-Id: Ia7a8785d3220df6feeb999bc70f6d1917cad8d75\n"
    },
    {
      "commit": "51c2467e8771b56e25ae4f17f66522f979f57a7e",
      "tree": "16a66abbb45ea3fcc8c513c8511f34a46cd454c4",
      "parents": [
        "27c590edf6c24107b6473e84e526c432bd081f6e"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 11 16:00:56 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 11 21:16:04 2013 -0700"
      },
      "message": "libart-compiler cleanup\n\n- Move compile-time code to src/compiler and libart-compiler\n  OatWriter, ImageWriter, ElfWriter, ElfFixup, ElfStripper, stub generation\n- Move ClassReference and MethodReference to remove MethodVerifier dependency on CompilerDriver\n- Move runtime_support_llvm.cc out of src/compiler and next to runtime_support.cc\n- Change dex2oat and gtests to directly depend on libart-compiler\n- Move non-common definitions from Android.common.mk to more specific makefiles\n- Add LOCAL_ADDITIONAL_DEPENDENCIES on appropriate makefiles\n\nChange-Id: I897027e69945914128f21f317a92caf9255bc600\n"
    },
    {
      "commit": "8a8539937f9cdbe37e0fba64101012a35ae204bf",
      "tree": "175a02cbc7eb7c8813c1ec5a8fa59a386875e39f",
      "parents": [
        "190dec7168f4fa45d85be0590051b0c53dba5378",
        "cc10e0eca724a005faa2d0d5a9445df7fe6ef1c6"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jul 03 07:25:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 03 07:25:35 2013 +0000"
      },
      "message": "Merge \"Constructor barrier support in DEX-to-DEX compiler.\" into dalvik-dev"
    },
    {
      "commit": "cc10e0eca724a005faa2d0d5a9445df7fe6ef1c6",
      "tree": "d7660a0eeaca72e422a55fe92d7b79a172714389",
      "parents": [
        "2cb33b8f7377f532cebed755be89bb351c150a22"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jun 28 14:24:48 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jul 01 10:59:28 2013 +0200"
      },
      "message": "Constructor barrier support in DEX-to-DEX compiler.\n\nBug: 9307738\n\nSome constructors require a barrier before returning. This CL introduces the\nRETURN-VOID-BARRIER instruction. The DEX-to-DEX compiler replaces all\nRETURN-VOID instructions where a barrier is required by this instruction.\nThe interpreter and the verifier are updated to support this new instruction.\n\nChange-Id: If31979b4027bc12157b933eda9fcbd5270edd202\n"
    },
    {
      "commit": "c15853b8b5da9dd8fb28e2adbbd61af34555e4c2",
      "tree": "946d064868a8f98894aaf926904744eefdf69e05",
      "parents": [
        "b126134010ebeee771da0eec7fa76ad13fe9a9c9"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 25 17:36:27 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 26 10:13:32 2013 +0200"
      },
      "message": "Cleanup quick support in verifier.\n\nBug: 9568063\n\nThis CL cleans up the way we are requesting for field/method being\naccessed/invoked by a -quick instruction.\n\nNow we let the verifier run completely and once it is done, we access the\nregister line of the instruction\u0027s dex PC and calculate the reference to the\nfield/method. This is pretty the same way the verifier checks the instruction\nbut here we get the final register line.\n\nChange-Id: I06f02b0ddeb1bbdd71de610cc0656057624f6e3b\n"
    },
    {
      "commit": "2d6ba5158d7fd459db2870df47300b517dc4d08c",
      "tree": "51e306969d4d707aee7a6bc36481390721e0f81f",
      "parents": [
        "1e2ee7de9dff66f7ca2bdf83a7262e21d75b37d1"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri May 17 11:31:37 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jun 24 15:29:06 2013 +0200"
      },
      "message": "Quickening support.\n\nThis CL adds quickening support for methods which are interpreted at runtime.\n\nThis CL introduces a DEX-to-DEX compiler. A method is now compiled in one of\nthe two following modes:\n- Native compilation: the method is compiled by the Quick or Portable backends.\nAt runtime, the generated native target-dependent code is executed.\n- DEX-to-DEX compilation: the method is executed by the interpreter at runtime.\nIts DEX code is compiled so some instructions can be replaced by special\ninstructions only valid at runtime. No native code is generated.\n\nThe quickening adds special instructions to improve runtime performance. They\nare \"-quick\" versions of the following instructions:\n- iget/iput\n- iget-wide/iput-wide\n- iget-object/iput-object\n- invoke-virtual/range.\n\nThese special instructions cannot be treated by the verifier since they lose\nthe field/method index referencing the field/method being accessed/invoked.\nTo prevent this, the DEX-to-DEX compiler is run only on methods of preverified\nclasses (without verification error at compilation time).\n\nThe DEX-to-DEX compiler implements quickening support using the CompilerDriver\ninterface like the native compiler does (Quick or Portable backends).\nTo replace instructions, the DEX-to-DEX compiler must be able to modify the\nmmapped DEX file. Since it can be read-only protected, the DEX-to-DEX compiler\nmust be able to temporarily change its protection to read-write mmapped file.\nTo achieve this, this CL adds support for changing DEX file protection with\nDexFile::EnableWrite and DexFile::DisableWrite methods. Besides, it also adds\na dedicated lock (DexFile::modification_lock) to ensure thread-safety and avoid\nconcurrent DEX file protection change (from a parallel DEX-to-DEX compiler on\nthe same DEX file).\n\nChange-Id: Iaafd103b9766810d7fc94a2c424a8fafba66e26a\n"
    },
    {
      "commit": "1d54e73444e017d3a65234e0f193846f3e27472b",
      "tree": "1de93661e95a0ce6fa78fdfc23d0cfd3dd2a06f7",
      "parents": [
        "4c22e7eabef3f815841dfc6e0d5bbead96150752"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 02 21:10:01 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jun 21 11:10:42 2013 -0700"
      },
      "message": "GC clean up.\n\nGreater use of directories and namespaces.\nFix bugs that cause verify options to fail.\nAddress numerous other issues:\n\nGC barrier wait occurring holding locks:\nGC barrier waits occur when we wait for threads to run the check point function\non themselves. This is happening with the heap bitmap and mutator lock held\nmeaning that a thread that tries to take either lock exclusively will block\nwaiting on a thread that is waiting. If this thread is the thread we\u0027re waiting\nto run the check point then the VM will deadlock.\nThis deadlock occurred unnoticed as the call to check for wait safety was\nremoved in: https://googleplex-android-review.googlesource.com/#/c/249423/1.\n\nNewTimingLogger:\nExisting timing log states when a split ends but not when it begins. This isn\u0027t\ngood for systrace, in the context of GC it means that races between mutators\nand the GC are hard to discover what phase the GC is in, we know what phase it\njust finished and derive but that\u0027s not ideal.\n\nSupport for only 1 discontinuous space:\nCode special cases continuous and large object space, rather than assuming we\ncan have a collection of both.\n\nSorted atomic stacks:\nUsed to improve verification performance. Simplify their use and add extra\nchecks.\n\nSimplify mod-union table abstractions.\n\nReduce use of std::strings and their associated overhead in hot code.\n\nMake time units of fields explicit.\n\nReduce confusion that IsAllocSpace is really IsDlMallocSpace.\n\nMake GetTotalMemory (exposed via System) equal to the footprint (as in Dalvik)\nrather than the max memory footprint.\n\nChange-Id: Ie87067140fa4499b15edab691fe6565d79599812\n"
    },
    {
      "commit": "62342ec720069cebe55f45aea2ff8512a17e7d62",
      "tree": "36e0d8d230163049d5f98b83f821fcb051b69b5d",
      "parents": [
        "ccf124800fe025be3ca05c28a60514909ca66a11"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jun 11 10:26:37 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jun 11 10:26:37 2013 -0700"
      },
      "message": "Mark newly allocated objects as precise.\n\nNew-arrays were previously precise because of finality. Because this has been\nweakened we need to explicitly mark allocated arrays as precise.\nFix RegTypeCache::FromUninitialized that was not making newly allocated objects\nprecise if the class wasn\u0027t final. As the object is being allocated we can be\nsure of its preciseness.\nFor core, increases type based interface devirtualization from 0.136% to 2.873%\n(21x improvement) and general devirtualization from 1.874% to 4.663% (2.5x\nimprovement).\n\nChange-Id: I494c5b4de7227bd5c8ca9cf37399594182dcd6f8\n"
    },
    {
      "commit": "04f94f4f02093fa0fc58007fd5f4ef4c58f8270a",
      "tree": "2f42e40ccb002fbdce22c1d2d64e1f666ba09649",
      "parents": [
        "0dc9d342bed34c3f1ce5268ff7a6e27cdb9490d9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jun 10 15:09:26 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jun 10 15:09:26 2013 -0700"
      },
      "message": "Don\u0027t always mark array types as precise.\n\nArray types are always final, as they cannot be sub-classed, they may be\nassigned by types that aren\u0027t themselves, e.g. Object[] may be assigned a\nString[]. Introduce CannotBeAssignedFromOtherTypes to capture this property\nand use in the verifier instead of IsFinal to mark things as precise.\n\nChange-Id: I34debd3164ca1b876be94b6722457cee6e1e9bd3\n"
    },
    {
      "commit": "16e3d2cee40f3305f29f3ce0d2857ecc815e57bc",
      "tree": "2c529f1777d351dfff8ef95edf95a3dd84358bf4",
      "parents": [
        "d090cf4f2420a228251e27dbae600f4f44ae2c57"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jun 07 12:57:00 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jun 07 13:04:17 2013 -0700"
      },
      "message": "Check interface assignability strictly for check-cast elision.\n\nObjects are assignable to interfaces in the verifier as described in the long\nRegType::ClassJoin comment. Using IsAssignableFrom therefore brought about\na bug where all check-casts where the cast type was an interface were being\nelided. Introduce a new strict is assignable from routine that follows the\nruntime rather than the verifier is assignable from behavior.\n\nChange-Id: Iac30f71ce9116f2ef16c22acd73eea1c19c79d89\n"
    },
    {
      "commit": "9b36039438c06e3c39324914fc13389b36c68dd2",
      "tree": "926cc2e7aefefd8149e297d37fa240c1c9df23ff",
      "parents": [
        "c9e463c8aa083a5ed20293f42363ebff93de5f84"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 06 14:45:07 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 06 14:45:07 2013 -0700"
      },
      "message": "Peephole the type of a source of a move-object before instance-of.\n\nIn relation to dx\u0027s Bug:9316546 we need to look through move-objects to see\nwhere the original register comes from.\nThis increases the number of check-casts removed in boot.oat by ~0.5%.\n\nChange-Id: I0c8e94978f522d840764fa675e805496a3ff08b8\n"
    },
    {
      "commit": "c9e463c8aa083a5ed20293f42363ebff93de5f84",
      "tree": "9664a0f909043f822437e804339c11eb77896db7",
      "parents": [
        "a7005960d536cbfd7ba82d2fa52ee1865516435b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 05 16:52:26 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 05 23:57:52 2013 -0700"
      },
      "message": "Faster instance-of for final classes.\n\nIf a class is final and not and array we can generate a 1/0 based on class\nequality.\nUse a method\u0027s declaring class if it matches the instance-of class (common in\nJava equals methods).\nDon\u0027t do a class pointer comparison in the case of an abstract or interface\nclass, just go straight into the slow-path.\nFix performance bug where peep-hole verifier pass didn\u0027t merge into the\nfall-through line if the next instruction wasn\u0027t interesting.\n\nChange-Id: Idb47ec6acebfd25a344ed74adaacba02fafc7df2\n"
    },
    {
      "commit": "a7005960d536cbfd7ba82d2fa52ee1865516435b",
      "tree": "4b48df851ee745e56eff5843d8c7e4b9feee4ecb",
      "parents": [
        "fae370a044f5817f69937cccfd2d12a16b374266"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 05 09:22:10 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 05 09:22:10 2013 -0700"
      },
      "message": "Unresolved types aren\u0027t assignable from Object.\n\nAlso, don\u0027t eliminate check-cast if an access check is required.\n\nChange-Id: Ibb864e01917a93f77db4cf6eb53461c5c7cb0162\n"
    },
    {
      "commit": "fae370a044f5817f69937cccfd2d12a16b374266",
      "tree": "60af2a03b19e9bcca149e0519504da134d17f9ed",
      "parents": [
        "1b1e8da7287e199533bf63d72f16fdff99fe7f8e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 05 08:33:27 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 05 08:33:27 2013 -0700"
      },
      "message": "Don\u0027t apply instance-of peephole when vDest \u003d\u003d vSrc.\n\nBug: 9284898.\nAlso statistic to show check-cast ellision use.\nFix bug where the check-cast ellision was using wrong dex pc.\nAvoid a use of DecodedInstruction.\nOther formatting clean-up.\n\nChange-Id: Ibf67941a24148b615896d0be6f2f29ce5034e53a\n"
    },
    {
      "commit": "980d16b81f3dd78eb491b80bed9cd184016878c6",
      "tree": "93b06ee8e66568a3a224798c3aa35768ea0c7e05",
      "parents": [
        "8d3a117b374352a1853fae9b7306afeaaa9e3b91"
      ],
      "author": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Tue Jun 04 15:01:40 2013 -0700"
      },
      "committer": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Tue Jun 04 15:50:14 2013 -0700"
      },
      "message": "Stage 2 of cast elision opt.\n\nNO code is generated for check-casts where we can statically determine the type is correct (through the instaceof-ifeq pattern).\n\nChange-Id: I4935375d7ffd4e7d4ff0aaad900c1a4de9deefaa\n"
    },
    {
      "commit": "5243e912875026f99428088db7e80cb11651d64e",
      "tree": "2c54105cd8d4f94a1309deb66b1a2809fd020eb7",
      "parents": [
        "534ae2b5fc648c7a69c7cd166c9f0440b14e5a38"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue May 21 10:55:07 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jun 03 11:06:39 2013 +0200"
      },
      "message": "Reduce use of DecodedInstruction in verifier.\n\nThis CL reduces the use of DecodedInstruction in verifier. It continues work\nstarted in https://googleplex-android-review.googlesource.com/#/c/311171.\n\nWe cannot remove it completely from verifier because of method\nMethodVerifier::VerifyInstruction. It is based on instruction flags rather than\ninstruction opcode. So we can\u0027t rely on instruction format. We may need to add\nVRegA, VRegB and VRegC methods for this case. This should also be required for\nthe compiler itself. Let\u0027s delay this change to another CL.\n\nChange-Id: I9d34df8b5bdb3db74e4959364c3cde90ef15585d\n"
    },
    {
      "commit": "d0583802482a7b2f54749edc4faa00303459f9a8",
      "tree": "640fb56bfe465aeed281a6585dc12836c87858f9",
      "parents": [
        "8427a3db9efb1c67d581fdae006b9afc5c1283b2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Jun 01 10:51:46 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Jun 01 11:16:53 2013 -0700"
      },
      "message": "Allow type based sharpening for imprecise references.\n\nWhen a reference is imprecise we may still be able to devirtualize if the\nmethod that is dispatched upon may not be overridden (ie final).\nSome other tidying of the devirtualization code.\n\nFor boot this increases the frequency of type based devirtualization by a\nlittle more than 0.01%.\n\nChange-Id: I050efbcc78c6b89135a6432bd7c2e946d8efbab4\n"
    },
    {
      "commit": "637c65b1e431fd90195b71c141b3590bd81cc91a",
      "tree": "30097d990e442290bbb4ce94620390075b2dd624",
      "parents": [
        "207bb6548f96636b40ee62124b37d2d82c3ddc6b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 31 11:46:00 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 31 21:31:37 2013 -0700"
      },
      "message": "Verifier improvements.\n\nMake type hierarchy for unresolved and unitialized types explicit.\nTidy and comment code.\nAdd DexFile::FindStringId that takes UTF-16 to avoid unnecessary UTF-8\nconversions during image writing.\nExplicitly disable RTTI that causes problems in debug builds.\n\nChange-Id: I701f1c3be8be5854fcabf5ec39e9f9c5d388aab0\n"
    },
    {
      "commit": "207bb6548f96636b40ee62124b37d2d82c3ddc6b",
      "tree": "520b7bba309fac9ee551898bace47e1768088b08",
      "parents": [
        "817e45a26552bc8420fbea9e657ea7884d1010d5",
        "39ebcb800aabedd0ffa6aa4aeac8aa4194c66e61"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 31 18:45:18 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 31 18:45:18 2013 +0000"
      },
      "message": "Merge \"More profiler driven tweaks.\" into dalvik-dev"
    },
    {
      "commit": "39ebcb800aabedd0ffa6aa4aeac8aa4194c66e61",
      "tree": "3efbbafa4cc39683a8bcbc2d76103c3d5bfbf072",
      "parents": [
        "f89eccd509475cb1949c729e796b26a2a248ae04"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 16:57:23 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 31 11:43:42 2013 -0700"
      },
      "message": "More profiler driven tweaks.\n\nMake more code inlinable by moving to header files.\nUse reserve on std::vectors to avoid reallocation.\n\nChange-Id: I1bf67d32dd58ff5c06dec73a247fadc3de593e91\n"
    },
    {
      "commit": "4e2fadad876b5f2ea5b5790b8a31dab300c685ff",
      "tree": "6bc5389b7074c7854bdc4ec580e63c14c661ad8a",
      "parents": [
        "104bdd890eb1e4d9d6645e41849dd5d0c9d6b7be",
        "2b87ddf36abff711fa2233c49bffc7ceb03b15d7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 20:21:35 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 30 20:21:35 2013 +0000"
      },
      "message": "Merge \"Elision of checks optimization.\" into dalvik-dev"
    },
    {
      "commit": "104bdd890eb1e4d9d6645e41849dd5d0c9d6b7be",
      "tree": "c0512735a0c58972061ebd5151ad82e03cce5670",
      "parents": [
        "49b21e38338f5c74b347c74da4b929fe43dc8396",
        "54c7e27ab00a32f7845e81505e125804e4a0b948"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 20:21:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 30 20:21:15 2013 +0000"
      },
      "message": "Merge \"Revert \"Elision of checks optimization.\"\" into dalvik-dev"
    },
    {
      "commit": "54c7e27ab00a32f7845e81505e125804e4a0b948",
      "tree": "e6f2bd0e62c7bd72753499140a854a1c4e5a976a",
      "parents": [
        "9e2d7f141d566f097b053f06053c374e8fe4392a"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 20:21:05 2013 +0000"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 20:21:05 2013 +0000"
      },
      "message": "Revert \"Elision of checks optimization.\"\n\nThis reverts commit 9e2d7f141d566f097b053f06053c374e8fe4392a\n\nChange-Id: I0d47ce8c715b9cb6c2eb30d7d4ef296982ca507c\n"
    },
    {
      "commit": "2b87ddf36abff711fa2233c49bffc7ceb03b15d7",
      "tree": "b53d3ac42b11e938b3d52f30f0a71cbf2e822037",
      "parents": [
        "e3cd2f0e3c3d976ae9c65c8a731003a5aaf71986"
      ],
      "author": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Tue May 28 14:14:12 2013 -0700"
      },
      "committer": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Thu May 30 13:14:34 2013 -0700"
      },
      "message": "Elision of checks optimization.\n\nFix for Change-Id: Ide3ea09c0e60647da30226d43ae869ca612856f3\nWe now sharpen types in the verifier based on instance-of followed by ifeq/ifneq pattern.\nChanged comments to conform to 100 char per line limit.\nAdded asserts.\n\n\tmodified:   src/dex_file_verifier.cc\n\tmodified:   src/verifier/method_verifier.cc\n\tmodified:   src/verifier/register_line.cc\n\nChange-Id: Ibc8804d78e9ea7caefc21034897a5a500ea014f0\n"
    },
    {
      "commit": "4e60ff6fdab5ef8344eff67034108d3f8a6e138c",
      "tree": "21cd9fa97fc9283c9845d3422ddc2ee47d91bdf2",
      "parents": [
        "1bf8d4dbe5cb9891e8a1125ff1928b544efc243a",
        "9e2d7f141d566f097b053f06053c374e8fe4392a"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 17:45:22 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 30 17:45:22 2013 +0000"
      },
      "message": "Merge \"Elision of checks optimization.\" into dalvik-dev"
    },
    {
      "commit": "9e2d7f141d566f097b053f06053c374e8fe4392a",
      "tree": "398a72cfe30a532b0ffde7483ad292c02b6afbf1",
      "parents": [
        "e3cd2f0e3c3d976ae9c65c8a731003a5aaf71986"
      ],
      "author": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Tue May 28 14:14:12 2013 -0700"
      },
      "committer": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Thu May 30 10:42:13 2013 -0700"
      },
      "message": "Elision of checks optimization.\n\nWe now sharpen types in the verifier based on instance-of followed by ifeq/ifneq pattern.\nChanged comments to conform to 100 char per line limit.\nAdded asserts.\n\n\tmodified:   src/dex_file_verifier.cc\n\tmodified:   src/verifier/method_verifier.cc\n\tmodified:   src/verifier/register_line.cc\n\nChange-Id: Ide3ea09c0e60647da30226d43ae869ca612856f3\n"
    },
    {
      "commit": "1bf8d4dbe5cb9891e8a1125ff1928b544efc243a",
      "tree": "84b28ef4c8bdf7da73c16e891e2fe978b52d9a90",
      "parents": [
        "b29bbbc00071f56a4a98a2d94c3968a36763ed55"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 00:18:49 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 10:20:05 2013 -0700"
      },
      "message": "Profiler directed clean-up of dex2oat.\n\nFix bad usage of std::string in: the verifier and compiler driver method\narguments, causing unnecessary boxing and allocations; in creating a symbol for\nthe dex compilation unit, that is only used in portable builds; in pattern\nmatching for intrinsics by name.\n\nMake class linker dex and classes locks reader/writer to allow concurrent\ndex cache or class querying. Refactor ComputeCompilingMethodsClass to pass in a\ndex cache hint, to avoid taking any locks when the dex file of the compiling\nmethod matches that of the field or method being resolved.\n\nMake the RegType\u0027s HasClass method virtual to avoid frequent virtual method\ndispatch. Make RegTypeCache GetFromId inlinable.\n\nVarious other bits of whitespace and formatting clean-up.\n\nChange-Id: Id152e1e5a6fed2961dad0b612b7aa0c48001ef94\n"
    },
    {
      "commit": "b88b3daca9f3c1554e0ea82b462894cb744da671",
      "tree": "e6f2bd0e62c7bd72753499140a854a1c4e5a976a",
      "parents": [
        "ef7162edde3ec04f1cd5a8d09a665fcb337d30aa"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu May 30 00:21:55 2013 +0000"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu May 30 00:21:55 2013 +0000"
      },
      "message": "Revert \"Elision of checks optimization.\"\n\nThis reverts commit ef7162edde3ec04f1cd5a8d09a665fcb337d30aa\n\nChange-Id: I914454adbe3a0d2f23f841efa1a201f3cbff4b6e\n"
    },
    {
      "commit": "ef7162edde3ec04f1cd5a8d09a665fcb337d30aa",
      "tree": "144a10ef3becf9b5d778f87ebf5223eefc54e11c",
      "parents": [
        "e3cd2f0e3c3d976ae9c65c8a731003a5aaf71986"
      ],
      "author": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Tue May 28 14:14:12 2013 -0700"
      },
      "committer": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Wed May 29 16:36:59 2013 -0700"
      },
      "message": "Elision of checks optimization.\n\nWe now sharpen types in the verifier based on instance-of followed by ifeq/ifneq pattern.\nChanged comments to conform to 100 char per line limit.\nAdded asserts.\n\n\tmodified:   src/dex_file_verifier.cc\n\tmodified:   src/verifier/method_verifier.cc\n\tmodified:   src/verifier/register_line.cc\n\nChange-Id: I857279ccd1e73c07638b42601d436e0ea5860fe9\n"
    },
    {
      "commit": "e3cd2f0e3c3d976ae9c65c8a731003a5aaf71986",
      "tree": "e6f2bd0e62c7bd72753499140a854a1c4e5a976a",
      "parents": [
        "1d9314c989114f330297d52dae3fe0cd4848b183"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 24 15:32:56 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 24 18:19:28 2013 -0700"
      },
      "message": "Enable devirtualization for abstract and sub-class methods.\n\nIf we know the type of a receiver in the verifier we record devirtualization\ndata. Currently we only use this data to avoid virtual method dispatch when\nwe know the receiver of a method isn\u0027t a sub-class. This change allows\ndevirtualization of virtual and interface methods when we know the receiver\u0027s\ntype and the method the we\u0027d find via dispatch is either known within boot or\nhas a reference from the current dex file.\n\nPass the receiver through to the method resolution trampoline as\ndevirtualization may mean the dex method index needs to be made more accurate\nfor the receiver.\n\nTidy up method devirtualization and related statistics.\n\nPush the devirtualization map lookup into a less common case to avoid\ntaking its lock.\n\nMake MethodReference a struct rather than a typedef of a pair, so the members\ncan have more meaningful names than first and second.\n\nRough statistics show that we devirtualize using this change around 2.5% of\nthe time, whilst some apps like GMS core devirtualize over 3.4% of the time.\n\nChange-Id: Ieed3471dbedfc4cc881d652631b67176bb37d394\n"
    },
    {
      "commit": "29e2e7e6807824f0d5dbfdd15835d2854ea7717c",
      "tree": "563969c30a3aa650e6da91efb16dbb69843f95ca",
      "parents": [
        "7b15b1b6809a3dc46c69610491d1b10513f449db"
      ],
      "author": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Wed May 22 14:52:11 2013 -0700"
      },
      "committer": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Wed May 22 14:52:11 2013 -0700"
      },
      "message": "Use UniquePtr in MethodVerifier::GenerateDevirtMap.\n\nAlso fix some indentation.\n\nChange-Id: I384d9c11e316f898ff26d0de533e4c4193db10b5\n"
    },
    {
      "commit": "02c42237741b5573f9d790a5a0f17f408dceb543",
      "tree": "293d72039e2e1a0e56fbcb572c6d92ccedc5581a",
      "parents": [
        "cf9773a7adff883012dbd519a66e85f1f7aaaa11"
      ],
      "author": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Tue Apr 30 12:09:45 2013 -0700"
      },
      "committer": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Thu May 02 14:19:17 2013 -0700"
      },
      "message": "Supporting de-virtualization for precise types.\n\nSharpening invoke-virtual and invoke-interface calls to invoke-direct for cases\nwhere the type of \"this\" pointer in the invoke- params is precisely known.\n\nInstructions that have an invoke opcode are marked as interesting, for each invoke-virtual/interface\nwe come across with a precise type for \"this\" we mark the location as a candidate for sharpening,\nresolve the concrete method and save its method reference \u003cDexFile, DexMethodIndex\u003e to be sharpened\nin CompilerDriver::ComputeInvokeInfo().\n\nAdded a new entry to AOT statistics showing the percentage of sharpened calls that were based on\ntype analysis.\n\nFix a minor bug in type creation for GetSuperClass(). Previously super class of a precise reference\nhad precise types created which is not necessarily the case.\n\nFixed DCHECK in Class::FindVirtualMethodForVirtual to handle cases for Miranda methods.\n\nSharpening only takes place for cases where no soft failures happen at verification time.\n\nChange-Id: Ic027d0226d6f95260c1918014cb6313f2e0ca455\n"
    },
    {
      "commit": "302a72d6e0e99208db629053dd77dda85896f707",
      "tree": "932d35c7dc03161f81f87dd1654b0330f942668c",
      "parents": [
        "31d4b8e0058b33e2c5ce792a69e5e897583652e2"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Apr 30 09:45:06 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Apr 30 09:45:06 2013 -0700"
      },
      "message": "Revert \"Supporting de-virtualization for precise types.\"\n\nThis reverts commit 31d4b8e0058b33e2c5ce792a69e5e897583652e2.\n"
    },
    {
      "commit": "31d4b8e0058b33e2c5ce792a69e5e897583652e2",
      "tree": "8b981aa8c0dcb2e540f5ba26951302f720299f8e",
      "parents": [
        "88fc036842eb3c48acd5d3b01e75b3012c996d90"
      ],
      "author": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Mon Apr 29 11:31:03 2013 -0700"
      },
      "committer": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Mon Apr 29 13:06:07 2013 -0700"
      },
      "message": "Supporting de-virtualization for precise types.\n\nSharpening invoke-virtual and invoke-interface calls to invoke-direct for cases\nwhere the type of \"this\" pointer in the invoke- params is precisely known.\n\nInstructions that have an invoke opcode are marked as interesting, for each invoke-virtual/interface\nwe come across with a precise type for \"this\" we mark the location as a candidate for sharpening,\nresolve the concrete method and save its method reference \u003cDexFile, DexMethodIndex\u003e to be sharpened\nin CompilerDriver::ComputeInvokeInfo().\n\nAdded a new entry to AOT statistics showing the percentage of sharpened calls that were based on\ntype analysis.\n\nFix a minor bug in type creation for GetSuperClass(). Previously super class of a precise reference\nhad precise types created which is not necessarily the case.\n\nFixed DCHECK in Class::FindVirtualMethodForVirtual to handle cases for Miranda methods.\n\nChange-Id: I0626d5cd1bc70a685db71abec067370ebdaf6edc\n"
    },
    {
      "commit": "f4da60751631f8bc098fbd04517f305bf7f20ae3",
      "tree": "5a359b033ee308154ffbdcfea47708bacd1c9cb3",
      "parents": [
        "b0682d5f7970470130f43d35f37ae7605a8a9bb8"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Apr 26 22:53:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 26 22:53:05 2013 +0000"
      },
      "message": "Revert \"Supporting de-virtualization for precise types.\"\n\nThis reverts commit b0682d5f7970470130f43d35f37ae7605a8a9bb8\n\nChange-Id: I2b0dc3e716ee5c23b89d9fa6eb0ef05c24784b3e\n"
    },
    {
      "commit": "b0682d5f7970470130f43d35f37ae7605a8a9bb8",
      "tree": "3bf3d9e1b3ed5da8e7db5c9e736e6cde7c5e30c8",
      "parents": [
        "ba1814eeac6adb44f2f78317556b3484b19e02fc"
      ],
      "author": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Fri Apr 05 19:13:07 2013 -0700"
      },
      "committer": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Fri Apr 26 10:12:52 2013 -0700"
      },
      "message": "Supporting de-virtualization for precise types.\n\nSharpening invoke-virtual and invoke-interface calls to invoke-direct for cases\nwhere the type of \"this\" pointer in the invoke- params is precisely known.\n\nInstructions that have an invoke opcode are marked as interesting, for each invoke-virtual/interface\nwe come across with a precise type for \"this\" we mark the location as a candidate for sharpening,\nresolve the concrete method and save its method reference \u003cDexFile, DexMethodIndex\u003e to be sharpened\nin CompilerDriver::ComputeInvokeInfo().\n\nAdded a new entry to AOT statistics showing the percentage of sharpened calls that were based on\ntype analysis.\n\nFix a minor bug in type creation for GetSuperClass(). Previously super class of a precise reference\nhad precise types created which is not necessarily the case.\n\nChange-Id: Iee61858e84242dfc82be363ee221d2747a1ac86a\n"
    },
    {
      "commit": "ee9889502a34a08741a6f8ecc02917202de9d773",
      "tree": "cdcfd55a15efe64b9acc14c9f0ab7d901f5a07c9",
      "parents": [
        "3e13ae7b85cc559f72bde6d2a3de61b9792f7de5"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Apr 16 14:23:47 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Apr 16 14:41:14 2013 -0700"
      },
      "message": "Add bool to verifier to allow soft failures.\n\nWhen false, soft failures in the verifier become hard failures. It should\nonly be false when not compiling, and calling the verifier from the class\nlinker.\n\nChange-Id: I664e5cbe491784b280aa5bfdb7e7fc0b771814f5\n"
    },
    {
      "commit": "51a5fb78d1b03b5235c2ae45414235282182bb86",
      "tree": "55816eb63505f5f2c65c9298d4412fea3eed1bf4",
      "parents": [
        "857fe960a02834c0d6b8792dcc0af8143995cb1f"
      ],
      "author": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Tue Feb 19 14:25:01 2013 -0800"
      },
      "committer": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Fri Mar 29 09:13:59 2013 -0700"
      },
      "message": "Refactoring type verification in Art.\n\nEach type now has its own class instead of one class with enums.\n\nImproved test cases for reg_type. Added test cases for testing precision, Merge,\nDump messages, etc.\n\nFixed bugs for:\n        1- Creating precise references in cache was ignoring the passed parameter\n        for reference types and only creating precise for final classes. Now creating\n        for final classes or if boolean set to true.\n        2- Precise constants were created if precise boolean passed as false ( and vice\n           versa ). Fixed.\n\nChange-Id: Ia5450d6c732f848e6b94298e43e8cfb819897fc6\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": "1212a022fa5f8ef9585d765b1809521812af882c",
      "tree": "67ebdc1d3274c78978b3d06630874d7641d858d1",
      "parents": [
        "8e6960569e9de6350d7da89aa02efe0e4b924d6f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 04 10:48:41 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 04 11:54:04 2013 -0800"
      },
      "message": "Move the Compiler to CompilerDriver.\n\nChange-Id: I0bb4d3c2b79b45fd8ef180688c767712b0c55978\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": "7b3ddd27c223fcce784314f78fda7f67dcb37730",
      "tree": "337784d971a0e2647dab27ddee9e5e5f5fb3bd4a",
      "parents": [
        "21bdc3d5a62767ea966a9c0e96b28095f7ccd798"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 21 15:19:52 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 21 16:09:44 2013 -0800"
      },
      "message": "Refactor DescribeVRegs to allow caching.\n\nIn oatdump we want to describe vregs at regular intervals and reverifying is\nslow. Refactor MethodVerifier to allow this. Move instruction flags into its\nown file so the complete type is visible to files other than method verifier.\n\nChange-Id: I14d491e7376ab1d7117a9725847870ef1337803f\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": "4993bbc8eda377804e585efd918f8ab9d9eab7d4",
      "tree": "bc49a14ce0c2718155444ac67152382e8c313326",
      "parents": [
        "16848f6c5c4d8394d491e887d7d805beddf173ad"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 10 15:41:25 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 10 16:05:44 2013 -0800"
      },
      "message": "Implement ThreadReference.OwnedMonitors.\n\nFix the method verifier so it can cope with not being able to resolve\ntypes in the application class loader, so we can find monitors held in\napplication code (this will improve SIGQUIT too).\n\nAlso remove the sort|uniq of dex pcs by just recording the last work\nline we see.\n\nChange-Id: I86ff27b42800a858489d112931c9aed2fb85ebdc\n"
    },
    {
      "commit": "80537bb742dff4ccdf6d04b1c0bb7d2179acc8cb",
      "tree": "38c5fc3dd0344ddf721320c07e39136b37a38815",
      "parents": [
        "6641ea12b98dda9ec45d29f20e43f85698b88a02"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 04 16:37:26 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 07 11:24:50 2013 -0800"
      },
      "message": "Fix and reenable lock dumping in stack dumps.\n\nThis patch adds a flag to tell the method verifier not to load\nclasses when resolving types, so that when we ask the method verifier\nto find monitor-enter instructions for stack dumping it doesn\u0027t try\nto allocate (since the most common cause of stack dumping is SIGQUIT).\nWe believe that all the classes we care about will be loaded already\nanyway, since we\u0027re only interested in _held_ locks, and you can only\nhold a lock if you\u0027ve executed the code that leads to the monitor-enter,\nand you can\u0027t execute the code without loading the relevant classes.\nAny not-yet-loaded classes shouldn\u0027t be relevant for our purposes.\n\nAlso clarify the stack dumps when a thread is starting up; although\nstrictly speaking a thread might be in the kNative state, it\u0027s more\nhelpful if we also explicitly say that it\u0027s still starting up.\n\nAlso a few GC log output fixes.\n\nChange-Id: Ibf8519e9bde27838c511eafa5c13734c5bebeab6\n"
    },
    {
      "commit": "e222ee0b794f941af4fb1b32fb8224e32942ea7b",
      "tree": "0b9f5fe6398663c9d871881cf7de28eca8bdfc6f",
      "parents": [
        "1aa246dec5abe212f699de1413a0c4a191ca364a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 13 14:41:43 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 13 15:24:45 2012 -0800"
      },
      "message": "Move stringpiece.h and stringprintf.h to base/.\n\nChange-Id: I7f71b4a12f99c5f81771146c66629ae5a947b229\n"
    },
    {
      "commit": "07ed66b5ae659c452cbe1ab20c3dbf1d6f546461",
      "tree": "2350745da33df6fcb9fb0c9059e55ea5d5ea8f67",
      "parents": [
        "76b6167407c2b6f5d40ad895b2793a6b037f54b2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 12 18:34:25 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 12 18:35:05 2012 -0800"
      },
      "message": "Move logging.h into base/logging.h.\n\nChange-Id: Id68f85f7c3a71b156cb40dec63f94d4fb827f279\n"
    },
    {
      "commit": "ce4cc0d1818e872c1c7f3c3519a82259afd5c288",
      "tree": "308f2c30e5a842a5e459d96e730ca4432a020f4f",
      "parents": [
        "823b8acdf2c8274ff93b685e50a93ab9afc6af8b"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Sun Nov 18 16:59:53 2012 -0800"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Tue Dec 04 11:07:34 2012 -0800"
      },
      "message": "Using gcmap instead of shadow frame.\n\nFix misuse of TBAAJRuntime \u0026 TBAARuntimeInfo. Now, the TBAAJRuntime is\nonly for runtime support function.\n\nUpdate DexPC before lock object and suspend.\n\nChange-Id: I40fa37f4863fe6e127328a8413285ee3c62e8505\n"
    },
    {
      "commit": "2bcb4a496b7aa00d996df3a070524f7568fb35a1",
      "tree": "8422ab8d65b7422008094b2eaadec0dad87b2df3",
      "parents": [
        "efc6369224b036a1fb77849f7ae65b3492c832c0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Nov 08 10:39:18 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Nov 16 14:01:34 2012 -0800"
      },
      "message": "Add \"kind\" argument to Get/SetVReg.\n\nIn order to determine where a register is promoted its necessary to know\nthe kind of use of the register.\nExtend notion of precise-ness to numeric verifier register types.\nDump verifier output in oatdump.\nDump vregs with their location or constant value.\nIntroduce indenting ostream utility.\n\nChange-Id: Ia3d29497877976bc24465484743bca08236e1768\n"
    },
    {
      "commit": "64b6d145fa53b8dfb07a8fc2426af13f155d5a4d",
      "tree": "727647da235e21508d6661c7e2a780ff8ee2003e",
      "parents": [
        "0f79d728370ab51b9b16a356b058c48330f43148"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 29 16:34:15 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Nov 01 17:26:15 2012 -0700"
      },
      "message": "Interpret class initializers when building image.\n\nWe initialize all image classes with the interpreter if they have a\nclass/static initializer.\nBlack list classes whose initializers need access to on device native\ncode. If such classes are added to the image classes they will fail when\nthey attempt to enter JNI code. A number of \"intrinsic\" style JNI\nroutines are special cased to allow more than just trivial class\ninitializers to run.\nAdd a lock for initialization in the compiler to serialize the execution\nof class initializers and avoid deadlock.\nRemove InSourceSpace from image writer (cruft) and teach the image writer\nto fix up referent fields in references.\nFix bugs in the interprerter and implement filled-new-array.\nFactor some VM code to more easily share between the interpreter and\nJNI entry points.\n\nChange-Id: I6bb811dea84f1b82260b1a4e73ac7412179c0b41\n"
    },
    {
      "commit": "2fa6b2e2fc3d2a2fc27808ce518dc76b80ce369a",
      "tree": "daba5f5e64409452e31ae42e3b1b6b6491ccb007",
      "parents": [
        "6ed960d260d0ec3cbbef455c646ccd47f4e78119"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 17 00:10:17 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 26 16:12:59 2012 -0700"
      },
      "message": "Interpreter.\n\nThe opcodes filled-new-array and packed-switch aren\u0027t implemented but\nare trivial given that they are variants of implemented opcodes.\nRefactor Field::Get routines to take the declaring class in the case of\nstatic field accesses. This avoids a check on every use of a field.\nRefactor arg array builder to be shared by JNI invokes and invocations\ninto the interpreter.\nFix benign bug in const decoding in the verifier.\n\nChange-Id: I8dee6c1f4b7f033e6c003422c56e9471cfaccda8\n"
    },
    {
      "commit": "c531cefbfb5394413122e9f57d211ba436cff012",
      "tree": "f1a7183c0aa17414df90409e99dc24e84aaa2562",
      "parents": [
        "9281f004db3f194930ef34d31e5d80c98341f38f"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 18 07:09:20 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 26 10:13:33 2012 -0700"
      },
      "message": "Eliminate #ifdef ART_USE_QUICK_COMPILER\n\nOne of several steps towards having a single compiler build.\nIn this CL, we introduce a compiler_backend command-line option\nto select between Quick, Quick w/ GBC, Portable and Iceland\nback ends.  The Iceland option is temporary, and will go away once\nwe combine with Portable.  The Quick variants are with\nand without GBC conversion.  In time, those will converge to a\nsingle option.\n\nAll uses of \"#if defined(ART_USE_QUICK_COMPILER)\" are eliminated.  All\nprevious uses in the Quick compiler have been converted to runtime\ntests.  On the llvm side, ART_USE_QUICK_COMPILER was previously\nused to differentiate between Portable and Iceland builds.  Those\nusages have been replaced with ART_USE_PORTABLE_COMPILER, and in\na following CL will also be converted to run-time tests.\n\nAs of this CL, we\u0027re still generating separate libraries for\nQuick and Portable/Iceland.  Next up is elminating the target-specific\nlibraries for Quick-arm, Quick-x86 and Quick-mips.  Once that is\ncomplete, we will consoldate Quick and Portable into a single build.\n\nTo build either Iceland or Portable, touch USE_PORTABLE_COMPILER or\nUSE_LLVM_COMPILER as usual.  Otherwise, the build will default\nto Quick (non-GBC).\n\nChange-Id: Ic86c56f51710c9b06d4430b71a429ae12903cc47\n"
    },
    {
      "commit": "b49035706fceb2b13e8154668f175af624cf88f4",
      "tree": "2da009e751d7ab90b3ca028767f6302358c70539",
      "parents": [
        "1aae273f8827bcbfff6b00c5babd77a111852272"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 11 11:52:56 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 11 11:52:56 2012 -0700"
      },
      "message": "Add notion of precise register types to verifier.\n\nWhen a class may have sub-classes we don\u0027t know if a method is\noverridden. Add an ability to the verifier to track when we have precise\ntype information. This allows the verifier differentiate the case of having\nsomething that must be of the type from the case where something is that\ntype or its sub-classes.\n\nChange-Id: I9995be7d6c147db3b22aa390b776d9c2eb93edd8\n"
    },
    {
      "commit": "50b35e2fd1a68cd1240e4a9d9f363e11764957d1",
      "tree": "4f3c58b7b293380f19e4f33357cb352e3330772e",
      "parents": [
        "8e9a1497f0d7da4d55f6e7ed8a7d96ba6db7222d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 04 10:09:15 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 05 11:07:39 2012 -0700"
      },
      "message": "Explicitly pass Thread::Current to MutexLock and Alloc.\n\nChange-Id: I8b75bc0617915465f102815b32306aa7760dcae4\n"
    },
    {
      "commit": "9b0b188ac610a5e8c00d6d5b06ccc6624f754c50",
      "tree": "25736ae9ae58cf720f630367c43a8dd3a039a81b",
      "parents": [
        "369809ba2903fd77ed4f019fc859636e7bbdd83a"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Mon Oct 01 16:51:22 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Mon Oct 01 16:51:22 2012 -0700"
      },
      "message": "Make verifier ignore a method if it\u0027s a duplicate.\n\nThe compiler has a similar hack. We should eventually fix the iterator\nto skip the duplicates automatically, but then the dump would be missing\nthem. I\u0027ll work on a test case so we can detect these problems more\neasily.\n\nChange-Id: Icf866f32395ee43c979747efa8141e3457bacdd1\n"
    },
    {
      "commit": "a75a01313e801c53145df00bad1842d9f643c0a1",
      "tree": "4c592c89e188cfb5b4efeb656f4d152cddc14d2c",
      "parents": [
        "acc46d6f64969a7ae32c53a92fcdad875ec6f50f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 28 11:41:42 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 28 11:41:42 2012 -0700"
      },
      "message": "Make dex instruction size a lookup.\n\nAdd ostream operators for dex instruction enums.\nMove simple methods to header file.\n\nChange-Id: I9644bfb975896a491ee73ef9a8ef13c062c5fcbd\n"
    },
    {
      "commit": "66f19258f9728d4ffe026074d8fd429d639802fa",
      "tree": "fd94009774c6cbbb1528ea096e606133bd35f104",
      "parents": [
        "a5e1e3d153990845d80cb8d013157210f11a473c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 18 08:57:04 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 21 17:32:56 2012 -0700"
      },
      "message": "Change dex cache to be java object instead of array, add pointer to dex file in dex cache.\n\nGeneric clean up to facilitate having GDB macros for Pretty* helper functions.\n\nImproved cleanliness of DexCache since having it as an object array was not the best solution.\n\nFixed a bug in InOrderWalk caused by ResolveType sometimes allocating classes.\n\nRename C++ Method to AbstractMethod and add two new classes Constructor, Method which both inherit from AbstractMethod.\n\nRename done to have the C++ code be closer to the java code.\n\nChange-Id: I4995b4c5e47a3822192b08afa24a639d3b1f4da9\n"
    },
    {
      "commit": "30bce5a262c0d74a1a9fbc8fedc287312b21e35d",
      "tree": "f34da18b23fdabfe137ebf802e47f29e583a625c",
      "parents": [
        "0c7abda482f53db3d153c073d1c7a145f84e0626"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 20 16:30:53 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 20 16:30:53 2012 -0700"
      },
      "message": "LLVM build fix.\n\nChange-Id: Iee616ece56b30529041f11069007440539e8ad73\n"
    },
    {
      "commit": "0c7abda482f53db3d153c073d1c7a145f84e0626",
      "tree": "837b89c75f0047cbcd16c9121739069a36b4f22a",
      "parents": [
        "ba0b9c55adce3f533845ab1b25c552589e5b4118"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 19 13:33:42 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 20 15:26:35 2012 -0700"
      },
      "message": "NativePcOffsetToReferenceMap\n\nRather than translate a native PC to a Dex PC and then to the reference\nbitmap, just go straight from the native PC to the reference bitmap.\nEncode the native PC offsets using a hash rather than linearly\nsearching.\n\nChange-Id: Iee1073d93c941c0a31f639e5f23cea9e9f747bee\n"
    },
    {
      "commit": "46c6bb2f52cef82660b9be7576b49f83845df93a",
      "tree": "3e9768b404a987e481a240a52ee07756323120d9",
      "parents": [
        "e8c819e7dfd1fa9205465843df595f6f227d2d73"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 18 13:47:36 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 18 13:53:50 2012 -0700"
      },
      "message": "Rename PcToReferenceMap adding Dex.\n\nChange-Id: I21ebfe9ac7fd8a627299f1f721eb4b11c87642dc\n"
    },
    {
      "commit": "89f960588c2d7e5220f9c82431df579294300932",
      "tree": "653d725678a285d6cf9a966ccb1daa59df85b743",
      "parents": [
        "1f196f1c338487d53d16fb132c619d6f5941a065"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Thu Jul 12 20:49:53 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:15:18 2012 -0700"
      },
      "message": "Move inferred_reg_category_map to greenland.\n\nChange-Id: I33e98b3cfe661f69046362d71f9315bd5b439abd\n"
    },
    {
      "commit": "21d28f510eb590f52810c83f1f3f37fe5f4adf46",
      "tree": "f937b4d39aab322541b9b83cc5dd59d8e3f2fddd",
      "parents": [
        "0967a25d1482d8f7b4a26c5926263e7ffa63189f"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Tue Jun 12 05:55:00 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:15:17 2012 -0700"
      },
      "message": "GBC Expander. Removed lir.\n\nChange-Id: If8d13e36f1e6d82c2a7f7bfec62b8fb41fd8cdaa\n"
    },
    {
      "commit": "c8982582778cc1571b65519e1112441be59a5f83",
      "tree": "4010b35ae0ea4f21c73fd58b7162318f8868afa2",
      "parents": [
        "b724071b67f6449589994a93d4195dda49321a47"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 07 16:53:25 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 07 17:26:33 2012 -0700"
      },
      "message": "Re-enable parallel verification.\n\nCheck that when verifying and initializing a class the lock on the class\nis held.\nAdd logging for slow verification of a method.\n\nChange-Id: Id51f8a108b8d1801d61ee276fab5001ddc5c0044\n"
    },
    {
      "commit": "b726dcb581bf72da46527378ccb6889020f0e6e9",
      "tree": "c0383ed788652926e93147e50d659ed226519548",
      "parents": [
        "fd678beb171a4686a4f2d53ca4188a4ade8fa54e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 05 08:57:23 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 05 09:06:19 2012 -0700"
      },
      "message": "Rename GlobalSynchronization to Locks\n\nAlso address some review comments in common_throws relating to\nToStr\u003cInvokeType\u003e and exception detail messages.\n\nChange-Id: Ibf2c0f147689fa236d349bd7f01eed3c2522552b\n"
    },
    {
      "commit": "faf459e5decdfcf6dd7844947898beefe31e6435",
      "tree": "7f08cafc93b75b068fc8576633fefa8d92208a46",
      "parents": [
        "692be80cb2278ae585a776a163bc4b3ef60cae88"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Fri Aug 31 15:32:47 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Fri Aug 31 16:07:57 2012 -0700"
      },
      "message": "Verifier no longer checks dead code after failing instruction at runtime.\n\nWhen a failure is detected by the verifier at runtime, the code\nfollowing the failing instruction is unreachable, and is no longer\nchecked. This prevents further failures from causing the whole class to\nbe thrown out. OTP is working again.\n\nChange-Id: I143a76370a2bc9998df526b03219b3ae40a77093\n"
    },
    {
      "commit": "9a4f003f9a6da8e4c6ee279bd2a13aac37648183",
      "tree": "ce78afe7c842c8ff99d52c0a09bfe758d67d037f",
      "parents": [
        "cfb21d92796087963c092b69110a2e7ff7a03a55"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 30 16:17:40 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Fri Aug 31 10:49:06 2012 -0700"
      },
      "message": "Remove the THROW_VERIFICATION_ERROR op and supporting code.\n\nChange-Id: Idc40a2c379048c7e3d74f50b2bd765a507a417ce\n"
    },
    {
      "commit": "e4f0b2ab4abd8e942a099e9b9b4682fbdd9eb21c",
      "tree": "1f7f1365914264de80ac992916d1bcea5c1e709e",
      "parents": [
        "2fc1427ee9c534ed44d72184ad6d74ea65f3d5b3"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 30 11:18:57 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 30 11:18:57 2012 -0700"
      },
      "message": "Allow soft failures at runtime and fix null referrer for ICCE and NSME.\n\nChange-Id: I814369f4e41cebf37007cb514a8bf19cbaf17e94\n"
    },
    {
      "commit": "2fc1427ee9c534ed44d72184ad6d74ea65f3d5b3",
      "tree": "7759b3b2f7e25ac66a2d05a48ac9ff918b95eb80",
      "parents": [
        "b9a287cc1c1f4f303acc186b7c97756f326d3537"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Aug 30 10:56:57 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Aug 30 10:56:57 2012 -0700"
      },
      "message": "Fix location of ICCEs and NoSuchMethodErrors.\n\nAlso add detail as to why verifier believes an ICCE.\n\nChange-Id: Ie16ea2847fb94e157969c560a780c9345b1e7441\n"
    },
    {
      "commit": "c0228b8f02c05ed58bea58490e0d8bdcaf8c5bb8",
      "tree": "afbfe1592284d1978ae619e0f9b5aae642b48197",
      "parents": [
        "08f753d5859936f8d3524e9e4faa6cee353873ea"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Aug 29 18:15:05 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Aug 29 18:29:36 2012 -0700"
      },
      "message": "Fixes to verifier and slowpaths for cts invoke tests.\n\nInstructions are never rewritten, so that has been removed from the\nverifier. Also, the slowpath now checks for access errors when it\ncan\u0027t properly resolve a method.\n\nChange-Id: Ie38eacec8eb092ba23502471a0b27ca8ce38fe68\n"
    },
    {
      "commit": "08f753d5859936f8d3524e9e4faa6cee353873ea",
      "tree": "5679a9ad8be6827e2a10de282cd28e3d000917de",
      "parents": [
        "b0b2be7688109cff548d2ddc8f02eecbad49ecd2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 24 14:35:25 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 28 11:34:56 2012 -0700"
      },
      "message": "Avoid compile time rewriting of dex code by verifier.\n\nCompile time rewriting of dex code leads to dead code that is causing\nissues with the LLVM compiler. Make instantiation and incompatible class\nchange errors be detected in slow path field and invoke logic so its\nsafe for the compile time verification just to softly fail the effected\nclasses.\n\nThis change places incompatible class change logic into the class\nlinkers ResolveMethod and consequently changes a number of APIs.\n\nChange-Id: Ifb25f09accea348d15180f6ff041e38dfe0d536e\n"
    },
    {
      "commit": "cd05a6274782c50a2b990c18b5f8d5ae5e44d509",
      "tree": "1a202f979454f8b6a1e4294776d52d20c526efc0",
      "parents": [
        "ef0a2ca1f719f64af59db08861edb73739bf5220"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Wed Aug 15 00:02:05 2012 -0700"
      },
      "committer": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Wed Aug 15 04:01:15 2012 -0700"
      },
      "message": "Global lock levels for the LLVM side.\n\nChange-Id: Id2807c8775686bc38f79e13c097fadda2d96d042\n"
    },
    {
      "commit": "00f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abac",
      "tree": "6a2172ece15c4699e6c2a67ce76f019db0a9a21d",
      "parents": [
        "634ea28f78c4a138e6a1de54eae8696095422415"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 19 15:28:27 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 14 10:45:52 2012 -0700"
      },
      "message": "Global lock levels.\n\nIntroduce the notion of the mutators/GC being a shared-exclusive (aka\nreader-writer) lock. Introduce globally ordered locks, analysable by\nannotalysis, statically at compile time. Add locking attributes to\nmethods.\n\nMore subtly, remove the heap_lock_ and split between various locks that\nare held for smaller periods (where work doesn\u0027t get blocked). Remove\nbuggy Dalvik style thread transitions. Make GC use CMS in all cases when\nconcurrent is enabled. Fix bug where suspend counts rather than debug\nsuspend counts were sent to JDWP. Move the PathClassLoader to\nWellKnownClasses. In debugger refactor calls to send request and\npossibly suspend. Break apart different VmWait thread states. Move\nidentity hash code to a shared method.\n\nChange-Id: Icdbfc3ce3fcccd14341860ac7305d8e97b51f5c6\n"
    },
    {
      "commit": "529781dad1d4bc5685fd9ebbf04c1369246c2403",
      "tree": "1313f6af94e592fc3c0cc7bf7c043f589329d996",
      "parents": [
        "ca7fd901bb6b5b014e8b2f3376a06c06a4c7ab87"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jul 23 17:24:29 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 24 10:01:45 2012 -0700"
      },
      "message": "Avoid cases of deriving information from unresolved types giving conflict.\n\nPreviously non-trivial merges of unresolved types resulted in conflict\n(bottom), introduce a new type to represent this case. Similarly\nimplement a type for unresolved super classes.\n\nChange-Id: Ib84ba082cb9409ad3acaa49dafbc6b1dd1c7772d\n"
    },
    {
      "commit": "380aaa74da9f0086b89b6032e7909ead4fa607f2",
      "tree": "4ddda528ed001493e4e9d9d08d35f0e88524cc7a",
      "parents": [
        "44a25bbc4626119d24d2cb7378212b6fd0093c19"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 09 14:33:15 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 09 14:47:51 2012 -0700"
      },
      "message": "Fix a possible off-by-one in the verifier.\n\nThe art version of 0bd15512ca35f8c77d743166807ce60684f21123.\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d10863\nChange-Id: I633b8731d06c83d992229a5831176f0a2ae47046\n"
    },
    {
      "commit": "1c849e5badc85b6753dee0c0487729b2c0529f51",
      "tree": "5f5c602d60404f66d363fe1b4f619d89087fef33",
      "parents": [
        "78a5e15629e6591090582cd83b1ec1380a50a840"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 28 14:00:33 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 28 14:00:33 2012 -0700"
      },
      "message": "Clean up kAccWritable in the verifier.\n\nkAccVerifier was deprecated, instead memory permissions were used in its\nstead.\n\nMove dead code scanning in the verifier to be enabled when the results\nwill be logged.\n\nChange-Id: Id20e62eefe958bd577b86bd7396a439d7a01c1b3\n"
    },
    {
      "commit": "08fc03ae5dded4adc9b45b7014a4b9dfedbe95a6",
      "tree": "3e767d037fd3e47e792b88d982ad38bce26d39e9",
      "parents": [
        "f94404ead1f2e4a1b5a2ff8bbdb65c5e4d4a77ea"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 26 17:34:00 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 27 12:18:25 2012 -0700"
      },
      "message": "Include held locks in SIGQUIT thread dumps.\n\nHandy if you have an ANR that\u0027s locking related. Quick tour:\n\n   at org.apache.harmony.dalvik.NativeTestTarget.emptyJniStaticSynchronizedMethod0(Native method)\n   - locked \u003c0x60135aa8\u003e (a java.lang.Class\u003corg.apache.harmony.dalvik.NativeTestTarget\u003e)\n   at java.lang.reflect.Method.invoke(Native method)\n   at C.whileTrue(Main.java:63)\n   at C.synchronizedOnClassString(Main.java:56)\n   - locked \u003c0x60002a70\u003e (a java.lang.Class\u003cjava.lang.String\u003e)\n   at C.nestedSynchronizationWithTryCatch(Main.java:44)\n   - locked \u003c0x61336b90\u003e (a java.lang.String)\n   - locked \u003c0x61336bd0\u003e (a java.lang.String)\n   at C.nestedSynchronization(Main.java:35)\n   - locked \u003c0x61336b18\u003e (a java.lang.String)\n   - locked \u003c0x61336b50\u003e (a java.lang.String)\n   at C.synchronizedOnClassC(Main.java:30)\n   - locked \u003c0x613366f8\u003e (a java.lang.Class\u003cC\u003e)\n   at C.noLocks(Main.java:27)\n   at C.\u003cclinit\u003e(Main.java:24)\n   - locked \u003c0x613366f8\u003e (a java.lang.Class\u003cC\u003e)\n   at Main.main(Main.java:19)\n\nA non-static synchronized native method works too:\n\n   at org.apache.harmony.dalvik.NativeTestTarget.emptyJniSynchronizedMethod0(Native method)\n   - locked \u003c0x613371a8\u003e (a org.apache.harmony.dalvik.NativeTestTarget)\n   ...\n\nNote that most stack traces don\u0027t look any different; the above is a\npathological example that exercises different kinds of locking. Testing\nwith system_server shows most threads don\u0027t hold any locks.\n\nFuture work (marked by TODO) is that explicit JNI MonitorEnter calls in\nnative code aren\u0027t shown.\n\nChange-Id: I2747f5cddb4ef64b1935736f084a68fe8e4005e9\n"
    },
    {
      "commit": "6d657bfcd28980a12f7971a87e603174af248700",
      "tree": "eecc9cd7425186ccae3262f6c5a7154add51e217",
      "parents": [
        "50b69e30ef69e72a48b1789622caaab4de203cfb"
      ],
      "author": {
        "name": "Logan Chien",
        "email": "loganchien@google.com",
        "time": "Wed Jun 27 16:23:27 2012 +0800"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Wed Jun 27 07:41:29 2012 -0700"
      },
      "message": "Ignore the redundant InferredRegCategoryMap.\n\nThe verifier may verify the same class more than once.\nThus, it is possible for us to \"Put\" the same key-value\npair to the \"SafeMap\" more than once.  In this case,\njust ignore the redundant key-value pair.\n\nNOTE: Since soft verification failure is not considered\nas erroneous, we may invoke VerifyClass again while we\nare verifying the subclass, which will verify its super\nclass if it is not successfully verified or in erroneous\nstate.\n\nChange-Id: Ifbd817b6e00c9b452ebbf1140750025ff261ef1e\n"
    },
    {
      "commit": "365c10235438607541fa2259a5fec48061b90bd8",
      "tree": "26516a4985a8bbef4c8da36b99bf1e54af3ad24d",
      "parents": [
        "147440427984816b6ed5235a9b1fb2cbf99496d0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jun 22 15:05:28 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jun 26 15:21:01 2012 -0700"
      },
      "message": "Increase use of ScopedJniThreadState.\n\nMove the routines for changing Object* to jobject and vice-versa\n(AddLocalReference and Decode) to ScopedJniThreadState to enforce use of\nObject*s in the Runnable thread state. In the Runnable thread state\nsuspension is necessary before GC can take place.\n\nReduce use of const ClassLoader* as the code bottoms out in FindClass\nand with a field assignment where the const is cast away (ie if we\u0027re\nnot going to enforce the const-ness we shouldn\u0027t pretend it is).\n\nRefactor the Thread::Attach API so that we\u0027re not handling raw Objects on\nunattached threads.\n\nRemove some unreachable code.\n\nChange-Id: I0fa969f49ee6a8f10752af74a6b0e04d46b4cd97\n"
    },
    {
      "commit": "a21039c3ae2b20e44ceb2735251c04d0aac89afd",
      "tree": "66b6fa437e7e4286b50bdef224500f9049633701",
      "parents": [
        "3d9d49fa2d025a041f57ea306ea551ef990177db"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 21 12:09:25 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 21 13:04:41 2012 -0700"
      },
      "message": "Fix a bunch more lint.\n\n(If you ignore the compilers, we\u0027ve got relatively little lint now. Fits on\na single screen.)\n\nChange-Id: I51389002894d4fd8cf46f79d2bac57079322a030\n"
    },
    {
      "commit": "0a1038b0a30a52dff1a449a989825e808a83df80",
      "tree": "4f4f72efe2d3fa076faf39c2ce084c9de9f5a4fe",
      "parents": [
        "56400fa8913530a6f01bb45723614f08fa44baf1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 14 16:24:17 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 14 16:51:10 2012 -0700"
      },
      "message": "Make tsan happy.\n\ntsan was unhappy with our static Mutex, claiming a race between the constructor\nwriting the \u0027rank_\u0027 field and Mutex::Lock reading it. My understanding of the\nGCC static initialization acquire/release code is that it includes memory\nbarriers that should make this safe, so I\u0027m reaching out to the tsan guys. In\nthe meantime, let\u0027s just make this MethodVerifier lock \u0026 collection like the\nother MethodVerifier locks \u0026 collections.\n\n  WARNING: Possible data race during read of size 4 at 0x1A42F09C: {{{\n   T2 (Compiler Worker) (L{}):\n    #0  art::Mutex::Lock /home/enh/local-disk/clean-dalvik-dev/art/src/mutex.cc:89\n    #1  art::verifier::MethodVerifier::IsClassRejected /usr/local/google/home/enh/clean-dalvik-dev/art/src/mutex.h:77\n    #2  art::Compiler::CompileClass /home/enh/local-disk/clean-dalvik-dev/art/src/compiler.cc:1420\n    #3  art::WorkerThread::Go /home/enh/local-disk/clean-dalvik-dev/art/src/compiler.cc:1013\n  Concurrent write(s) happened at (OR AFTER) these points:\n   T1 (Compiler Worker) (L{}):\n    #0  art::Mutex::Mutex /home/enh/local-disk/clean-dalvik-dev/art/src/mutex.cc:67\n    #1  art::verifier::MethodVerifier::IsClassRejected /home/enh/local-disk/clean-dalvik-dev/art/src/verifier/method_verifier.cc:3334\n    #2  art::Compiler::CompileClass /home/enh/local-disk/clean-dalvik-dev/art/src/compiler.cc:1420\n    #3  art::WorkerThread::Go /home/enh/local-disk/clean-dalvik-dev/art/src/compiler.cc:1013\n  Address 0x1A42F09C is 28 bytes inside data symbol \"_ZZN3art8verifierL22GetRejectedClassesLockEvE21rejected_classes_lock\"\n   Race verifier data: 0x1A198B1E,0x1A198025\n  }}}\n\n(cherry picked from commit 6356df46fb0ebff5467d3103b97c3c871940e402)\n\nChange-Id: I26a9c91f133370161ab4679e36d9a02315d28847\n"
    }
  ],
  "next": "666d9b4706a81a3406b6f3e3e043056b8786abc1"
}
