)]}'
{
  "log": [
    {
      "commit": "83c8ee000d525017ead8753fce6bc1020249b96a",
      "tree": "d5167ed15dee2629905ac3640b6ea0578d4ae312",
      "parents": [
        "7cba217ab0661d74deccbb97160cdf60b74d4ea3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 28 14:50:23 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 11 10:40:10 2014 -0800"
      },
      "message": "Add root types and thread id to root visiting.\n\nEnables us to pass the root type and thread id to hprof.\n\nBug: 12680863\nChange-Id: I6a0f1f9e3aa8f9b4033d695818ae7ca3460d67cb\n"
    },
    {
      "commit": "ef7d42fca18c16fbaf103822ad16f23246e2905d",
      "tree": "c67eea52a349c2ea7f2c3bdda8e73933c05531a8",
      "parents": [
        "822115a225185d2896607eb08d70ce5c7099adef"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jan 06 12:55:46 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 06 23:20:27 2014 -0800"
      },
      "message": "Object model changes to support 64bit.\n\nModify mirror objects so that references between them use an ObjectReference\nvalue type rather than an Object* so that functionality to compress larger\nreferences can be captured in the ObjectRefererence implementation.\nObjectReferences are 32bit and all other aspects of object layout remain as\nthey are currently.\n\nExpand fields in objects holding pointers so they can hold 64bit pointers. Its\nexpected the size of these will come down by improving where we hold compiler\nmeta-data.\nStub out x86_64 architecture specific runtime implementation.\nModify OutputStream so that reads and writes are of unsigned quantities.\nMake the use of portable or quick code more explicit.\nTemplatize AtomicInteger to support more than just int32_t as a type.\nAdd missing, and fix issues relating to, missing annotalysis information on the\nmutator lock.\nRefactor and share implementations for array copy between System and uses\nelsewhere in the runtime.\nFix numerous 64bit build issues.\n\nChange-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822\n"
    },
    {
      "commit": "eae2fb27c91aa7972dffcb32d5e405567badd6aa",
      "tree": "07b53346da7531093d9720fb8a5ee218b4a20c6f",
      "parents": [
        "4289116517f765df84820bf753fbf891986f40ca"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 14 14:31:25 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 14 15:25:45 2014 -0800"
      },
      "message": "Don\u0027t resolve types in verifier when we can\u0027t load classes.\n\nAdded a boolean parameter to GetReturnType which tells us whether or\nnot we can resolve types. We pass in can_load_classes_.\n\nBug: 11689500\nChange-Id: Ib3d35f441e08c2409ce14ac269854012dc978ddd\n"
    },
    {
      "commit": "849600bb5cfc02bf5ab4aa9a810667ebd3b53328",
      "tree": "9c1b1a8441074d13bafc0283a7632872f7680abc",
      "parents": [
        "64763b9b42bdb96c5d1e48d10223c7b96c1f73c4"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Dec 20 10:28:08 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Dec 20 17:55:42 2013 +0100"
      },
      "message": "Use imprecise constants at compilation time.\n\nDuring veriifcation, we create constant types for the following instructions:\nconst/4, const/16, const and const/high16. We used to create \"precise\" constant\ntypes for each constant we process in the method being verified. Though precise\nconstants are only useful for deoptimization which happens at runtime.\n\nThis CL now creates \"imprecise\" constant types at compilation time. Since it\nreduces the number of constant types we create during verification, it should\nalso reduce the amount of time spent in verification at compilation time.\n\nBug: 12167380\nBug: 12126841\nChange-Id: I70522c4133a74a533fc2d2cb8d4f49888e590828\n"
    },
    {
      "commit": "2b5eaa2b49f7489bafdadc4b4463ae27e4261817",
      "tree": "ada8b60989919068d562e3fcee01aa5b7c5cfc61",
      "parents": [
        "0bf1f266869776c2dd21b3242599d74ac80855f0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 13 13:59:30 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 17 11:03:53 2013 +0000"
      },
      "message": "Move compiler code out of method verifier.\n\nWe want to detect small methods for inlining at the end of\nthe method verification. Instead of adding more compiler\ncode to the runtime, we create a callback from the runtime\ninto the compiler, so that we can keep the code there.\nAdditionally, we move the compiler-related code that was\nalready in the method verifier to the compiler since it\ndoesn\u0027t really belong to the runtime in the first place.\n\nChange-Id: I708ca13227c809e07917ff3879a89722017e83a9\n"
    },
    {
      "commit": "2d7e5aa6c707537f1906ed77b0ff29ec3dd261f7",
      "tree": "ede87a07e14bc8f596604639b06c6b133ee1be0f",
      "parents": [
        "03d7e9af6ccec24c12f63c0e6b777de412cbb8b1"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Dec 13 17:39:59 2013 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Dec 13 17:49:00 2013 -0800"
      },
      "message": "Add classes that fail verification early to rejected class list.\n\nChange-Id: I5e06ec2dc3dfd061fcd6c099e10991482a1aaf65\n"
    },
    {
      "commit": "c528dba35b5faece51ca658fc008b688f8b690ad",
      "tree": "d95c113a639d07f7e3b88e8a6caa9b5f6e044801",
      "parents": [
        "76f552307ee980221626d1dff0ada56c989d24ca"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 26 12:00:11 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 10 16:00:58 2013 -0800"
      },
      "message": "Enable moving classes.\n\nSlight reduction in Zygote size, memory savings are in the noise.\nBefore: Zygote size: 8739224\nAfter: Zygote size: 8733568\n\nFixed a bug where we didn\u0027t set the concurrent start bytes after\nswitching the allocator from bump pointer to ROSAlloc in the\nzygote. This caused excessive memory usage.\n\nAdded the method verifiers as roots to fix an issue caused by\nRegTypes holding a Class*.\n\nAdded logic to clear card table in the SemiSpace collector, this\nreduces DalvikOther from ~2400k -\u003e ~1760k when using the SemiSpace\ncollector.\n\nAdded a missing lock to the timing loggers which caused a rare\none time crash in std::set.\n\nBug: 11771255\nBug: 8499494\nBug: 10802951\n\nChange-Id: I99d2b528cd51c1c5ed7012e3220b3aefded680ae\n"
    },
    {
      "commit": "8171fc34bf74ed0df02385787d916bc13eb7f160",
      "tree": "9c2b15d421bbf7483dd042a4b9985517c3cc86ee",
      "parents": [
        "fa365d2fa097810f31d6cb1b1ef415636bc63af8"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 26 17:05:58 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 10 10:02:58 2013 +0000"
      },
      "message": "Don\u0027t prefix GC map by length.\n\nBug: 11767815\nChange-Id: I063917aefdf7674ee1a77736db059c9ee95ea075\n"
    },
    {
      "commit": "4137f4828a6a7c48aa1b161cecb82e1e0880aa16",
      "tree": "26b54e93bd748ff6d84d3bee431407a40fa92592",
      "parents": [
        "b6b4c459ef823ba62696796542519655c79423c2"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Nov 22 11:44:57 2013 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Nov 22 11:44:57 2013 -0800"
      },
      "message": "Make verifier log hard failures by default.\n\nPreviously required verbose verifier logging to see reasons for hard failures.\n\nChange-Id: I2d05dfec95aeb48e8e1d9d3e4386916ab90071a4\n"
    },
    {
      "commit": "c255e9723c4ac6eff7778ade21296bb5f11ea7bf",
      "tree": "1d971d90020797f9480be59d4b2135e817de0ab3",
      "parents": [
        "ba9ece9c58de90b39c39b29dbdaee54b1654c066"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 19 11:21:24 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 19 12:13:14 2013 +0000"
      },
      "message": "Avoid unnecessary copy of dex_gc_map.\n\nChange-Id: I8a7209d92aeee853f6a4e9e9bb0e094c5acd5e05\n"
    },
    {
      "commit": "590fee9e8972f872301c2d16a575d579ee564bee",
      "tree": "b02db45c72f1911ec896b93379ada0276aea3199",
      "parents": [
        "5b70680b8df6d8fa95bb8e1070d0107f3d388940"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 13 13:46:47 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 11 15:34:27 2013 -0800"
      },
      "message": "Compacting collector.\n\nThe compacting collector is currently similar to semispace. It works by\ncopying objects back and forth between two bump pointer spaces. There\nare types of objects which are \"non-movable\" due to current runtime\nlimitations. These are Classes, Methods, and Fields.\n\nBump pointer spaces are a new type of continuous alloc space which have\nno lock in the allocation code path. When you allocate from these it uses\natomic operations to increase an index. Traversing the objects in the bump\npointer space relies on Object::SizeOf matching the allocated size exactly.\n\nRuntime changes:\nJNI::GetArrayElements returns copies objects if you attempt to get the\nbacking data of a movable array. For GetArrayElementsCritical, we return\ndirect backing storage for any types of arrays, but temporarily disable\nthe GC until the critical region is completed.\n\nAdded a new runtime call called VisitObjects, this is used in place of\nthe old pattern which was flushing the allocation stack and walking\nthe bitmaps.\n\nChanged image writer to be compaction safe and use object monitor word\nfor forwarding addresses.\n\nAdded a bunch of added SIRTs to ClassLinker, MethodLinker, etc..\n\nTODO: Enable switching allocators, compacting on background, etc..\n\nBug: 8981901\n\nChange-Id: I3c886fd322a6eef2b99388d19a765042ec26ab99\n"
    },
    {
      "commit": "c26a56cb596c3c8efd519c4014fc2ebb3e48b221",
      "tree": "af1a350fbafcb9bb98abc1096261d44241ffac27",
      "parents": [
        "e508a2090b19fe705fbc6b99d76474037a74bbfb"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Nov 04 12:00:47 2013 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Nov 04 23:10:02 2013 +0000"
      },
      "message": "Verifier uses exception type instead of conflict if unresolved.\n\nFixes OneMedical app installation issues.\n\nBug: 11335470\nChange-Id: I10ef8c84ef5bf5587283413b8cea89202407fe2b\n"
    },
    {
      "commit": "7195dd860e424057bd9a17d501269d9b50673f11",
      "tree": "3e656d8b35f6f74b2e4fbc398c1834a96bb6b73d",
      "parents": [
        "9728f91a63016136261231ff5213bde703bd27b6",
        "dfb325e0ddd746cd8f7c2e3723b3a573eb7cc111"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 30 17:17:11 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Oct 30 17:17:11 2013 +0000"
      },
      "message": "Merge \"Don\u0027t use UTF16 length as length for MUTF8.\" into dalvik-dev"
    },
    {
      "commit": "dfb325e0ddd746cd8f7c2e3723b3a573eb7cc111",
      "tree": "0b63738b04404f42015da7164dfe5ec506452b02",
      "parents": [
        "eda6df7374bf61c933d4a36635e2a9a30c9892a0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 30 01:00:44 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 30 01:00:44 2013 -0700"
      },
      "message": "Don\u0027t use UTF16 length as length for MUTF8.\n\nBug 11367555.\n\nChange-Id: Ia0b07072a1a49d435c3b71ed9a668b316b7ff5d8\n"
    },
    {
      "commit": "8249b425ba81d804c222c746e31bfcac9516e759",
      "tree": "1743aef5417c31921d4d33a837790a0a743813cb",
      "parents": [
        "ad3d996316dd90b84b4b29ccdfc4aeeb1ec890ee"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Oct 29 17:50:55 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Oct 29 18:12:34 2013 +0100"
      },
      "message": "Avoid verifier crash for quickened invoke on null.\n\nWhen verifying an invoke-virtual-quick on a \"null\" instance, we can\u0027t infer the\nclass of the method being invoked. This CL handles this case and avoid a crash\ndue to a failed check in RegType::GetClass.\n\nAlso revert changes made to test 082-inline-execute since it succeeds with this\nCL now.\n\nBug: 11427954\nChange-Id: I4b2c1deaa43b144684539acea471543716f36fb3\n"
    },
    {
      "commit": "a9a8254c920ce8e22210abfc16c9842ce0aea28f",
      "tree": "56614ee997940e8e3b88fef43b890e8a33e78112",
      "parents": [
        "34633b22f74393344987a50b8aaee548a9dadc18"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 04 11:17:26 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 08 15:54:54 2013 -0700"
      },
      "message": "Improve quick codegen for aput-object.\n\n1) don\u0027t type check known null.\n2) if we know types in verify don\u0027t check at runtime.\n3) if we\u0027re runtime checking then move all the code out-of-line.\n\nAlso, don\u0027t set up a callee-save frame for check-cast, do an instance-of test\nthen throw an exception if that fails.\nTidy quick entry point of Ldivmod to Lmod which it is on x86 and mips.\nFix monitor-enter/exit NPE for MIPS.\nFix benign bug in mirror::Class::CannotBeAssignedFromOtherTypes, a byte[]\ncannot be assigned to from other types.\n\nChange-Id: I9cb3859ec70cca71ed79331ec8df5bec969d6745\n"
    },
    {
      "commit": "34633b22f74393344987a50b8aaee548a9dadc18",
      "tree": "f4df741c3563b1299781a5bfe32bea844cf619f2",
      "parents": [
        "f1603c2d1c9da70a8e2e4d6af8cf62776ce6b035",
        "5ce6f04f4ae2ea3a105a2bf77cc3ef57c856b157"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Oct 04 17:43:55 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 04 17:43:55 2013 -0700"
      },
      "message": "am 5ce6f04f: am 3057d341: am a6b22c5b: Verifier allows arguments of integral types to be interchangeable.\n\n* commit \u00275ce6f04f4ae2ea3a105a2bf77cc3ef57c856b157\u0027:\n  Verifier allows arguments of integral types to be interchangeable.\n"
    },
    {
      "commit": "a6b22c5be364a4ea926bfd2d0ea6169b22bdd10b",
      "tree": "cae85ffc74f27444b55ed27a049ad27fb7837010",
      "parents": [
        "756ee4e090bc1e1812b41fb7b4661df601a32ef9"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Oct 04 14:33:22 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Oct 04 16:07:13 2013 -0700"
      },
      "message": "Verifier allows arguments of integral types to be interchangeable.\n\nThis fixes a bug where code was passing an int into a method with a\nbyte argument. The RI allows this, but the verifier was rejecting it.\n\nBug: 11033423\nChange-Id: I2a6af3bbbc6e9288fc000f711ae1337ab5786d1a\n"
    },
    {
      "commit": "d91d6d6a80748f277fd938a412211e5af28913b1",
      "tree": "5c45f4ae53aab3f530284a97dc328b4e38ce7c94",
      "parents": [
        "9c11b56296b8cffc94b0b854ce6cff7e014b8d57"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 25 20:26:14 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 26 21:08:25 2013 -0700"
      },
      "message": "Introduce Signature type to avoid string comparisons.\n\nMethod resolution currently creates strings to then compare with strings formed\nfrom methods in other dex files. The temporary strings are purely created for\nthe sake of comparisons. This change creates a new Signature type that\nrepresents a method signature but not as a string. This type supports\ncomparisons and so can be used when searching for methods in resolution.\n\nWith this change malloc is no longer the hottest method during dex2oat (now its\nmemset) and allocations during verification have been reduced. The verifier is\ncommonly what is populating the dex cache for methods and fields not declared\nin the dex file itself.\n\nChange-Id: I5ef0542823fbcae868aaa4a2457e8da7df0e9dae\n"
    },
    {
      "commit": "d0fbd85a82a266c21d6b72c61d6dc098ec362de7",
      "tree": "14f431e4bd889b6c7ec6b29322594786828d3bb1",
      "parents": [
        "fc0e94bed3f88ed7e50854fd8dfaf5dcb345250f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 24 18:17:04 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 24 21:17:06 2013 -0700"
      },
      "message": "Reduce memory allocation in verifier.\n\nRemove the use of a map PcToRegisterLineTable for efficiency (matches Dalvik).\nPlace the register line register values inside the RegisterLine, saves a\nsecondary allocation and indirection.\nAvoid the use of a deque in RegisterLine to avoid an allocation.\nSimplify the SirtRef destructor in non-debug builds.\nSaves \u003e100ms from the two threaded compile time of ThinkFree on host.\n\nChange-Id: I2dacba61dbaf284ca02d4c194413e1da221dcb76\n"
    },
    {
      "commit": "fc0e94bed3f88ed7e50854fd8dfaf5dcb345250f",
      "tree": "5cfbe05084351576e9659cb8f7b66dcb6163a37b",
      "parents": [
        "576fe9d4181c749aa510e32d2521ed4192bdfda0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Sep 23 23:51:32 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 24 17:07:24 2013 -0700"
      },
      "message": "StringPiece clean up.\n\nProfile guided clean up.\nTry to avoid creating StringPieces with the contents of a dex file where\nthe length is known.\nTry to avoid RegTypeCache::FromDescriptor when there\u0027s a class available.\nMake ConstantType::ConstantValue inlinable.\nSaving of about 50ms from a 2 threaded ThinkFree compile on host.\n\nChange-Id: I47a12c3c76f46e2c9805be1c3a3e3870fe1f5d85\n"
    },
    {
      "commit": "deb43702e611d6c75b459ea352a00f5d98fc0aa9",
      "tree": "3a85938cf895bbdf3082eb5cf6a235514818a2ec",
      "parents": [
        "abcf7ae8deba4ee81dec44f3d1a2f0ecaf032859"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Sep 03 19:07:00 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Sep 24 16:26:02 2013 -0700"
      },
      "message": "Fix handling of unresolved references in verifier.\n\nThe verifier should not treat use of unresolved references as a reason to reject\nthe entire class. Instead, the verifier treats the instruction as a throw. If\nthat class is run, the interpreter with extra checks will throw an exception.\n\nBug: 10457426\n\n(cherry picked from commit a3faaf4bece7f42529c013fe87bd41de59798656)\n\nChange-Id: I161bfdbfa116890ffa9e7a593c756229bd939eb4\n"
    },
    {
      "commit": "a3faaf4bece7f42529c013fe87bd41de59798656",
      "tree": "933e312a4aa4d69b2d7da7eda4d592419cec4729",
      "parents": [
        "a9a624b2be2180e6bd33f02c89fb8521376a2e8c"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Sep 03 19:07:00 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Sep 24 15:18:36 2013 -0700"
      },
      "message": "Fix handling of unresolved references in verifier.\n\nThe verifier should not treat use of unresolved references as a reason to reject\nthe entire class. Instead, the verifier treats the instruction as a throw. If\nthat class is run, the interpreter with extra checks will throw an exception.\n\nBug: 10457426\n\nChange-Id: I3799da843a7ffb3519bbf6dc13a6276519d9cb95\n"
    },
    {
      "commit": "ee39a10e45a6a0880e8b829525c40d6055818560",
      "tree": "88cf2b0765ffc8cc96aa2f895254fbf799d0eb40",
      "parents": [
        "7d690ba929a2a02e2b6344749561d49e2c0d55d2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 19 02:56:49 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Sep 21 22:00:10 2013 -0700"
      },
      "message": "Use class def index from java.lang.Class.\n\nBug: 10244719\nThis removes the computation of the dex file index, when necessary this is\ncomputed by searching the dex file. Its only necessary in\ndalvik.system.DexFile.defineClassNative and DexFile::FindInClassPath, the\nlatter not showing up significantly in profiling with this change.\n\n(cherry-picked from 8b2c0b9abc3f520495f4387ea040132ba85cae69)\nChange-Id: I20c73a3b17d86286428ab0fd21bc13f51f36c85c\n"
    },
    {
      "commit": "8b2c0b9abc3f520495f4387ea040132ba85cae69",
      "tree": "13ea7e5c4e3d1804ec8d420d36f7ea5ab18f6ac0",
      "parents": [
        "5712d5d04640925970db9c98938ffaf806b3962c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 19 02:56:49 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 19 15:17:12 2013 -0700"
      },
      "message": "Use class def index from java.lang.Class.\n\nBug: 10244719\nDepends on:\nhttps://googleplex-android-review.git.corp.google.com/362363\nThis removes the computation of the dex file index, when necessary this is\ncomputed by searching the dex file. Its only necessary in\ndalvik.system.DexFile.defineClassNative and DexFile::FindInClassPath, the\nlatter not showing up significantly in profiling with this change.\n\nChange-Id: I20c73a3b17d86286428ab0fd21bc13f51f36c85c\n"
    },
    {
      "commit": "dd3c27eeb8286ab53d8a2f1aec76a7a919ba353a",
      "tree": "f03ff1b2e3d5a22710aa085d8b24502998b93d8b",
      "parents": [
        "8438ed31e10f3881ed92f03877d5edaca7d5b48c"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Sep 04 16:11:55 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Sep 06 13:09:14 2013 -0700"
      },
      "message": "Fix verifier upcasting type after instance_of.\n\nThe verifier automatically changed the type of a register to be\nthe checked type in an instance_of instruction, even if the\nchecked type was the register type\u0027s superclass. This would loosen\nthe type information of the register and cause problems later.\n\nBug: 10614872\n\n(cherry picked from commit c642ec8987746a2a44b990bd5354306242d709da)\n\nChange-Id: Ib447557d3582dad6ac01f0e3b4ee497a27a45172\n"
    },
    {
      "commit": "c642ec8987746a2a44b990bd5354306242d709da",
      "tree": "bc257f588bd2623eadb8b4af0b99df3096993c42",
      "parents": [
        "8c6326c528aa785041f0d8c08e24c6b793ba5b6e"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Sep 04 16:11:55 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Sep 04 16:14:13 2013 -0700"
      },
      "message": "Fix verifier upcasting type after instance_of.\n\nThe verifier automatically changed the type of a register to be\nthe checked type in an instance_of instruction, even if the\nchecked type was the register type\u0027s superclass. This would loosen\nthe type information of the register and cause problems later.\n\nBug: 10614872\n\nChange-Id: I67aa2c66be754d946e928b8a64431f193539b842\n"
    },
    {
      "commit": "b8a0b94735f188bc739e4c55479c37699006b881",
      "tree": "6620437e5019924f9da7b1c9a6408cf4a113b3e5",
      "parents": [
        "aa836f7fa2ef359cf8ec1ef98d924f7971ba8352"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 20 18:09:52 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 20 18:11:09 2013 -0700"
      },
      "message": "Switch JNI globals lock to reader-writer.\n\nAlso, verifier rejected classes lock. These locks show as contended during\ndex2oat, however, they\u0027re commonly only read access is required.\n\nChange-Id: If8bb834cc69cd8c26494c87fb7f7b20d4e41cdfd\n"
    },
    {
      "commit": "90af14d2743614e3e1453984b14258a6f145501d",
      "tree": "defcc7bdc0a85de36695b7c7285d7d5759ade92c",
      "parents": [
        "212ec8f32919d50a1e1cb7ea4b3b91ca938ae4e6"
      ],
      "author": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Thu Aug 15 17:50:16 2013 -0700"
      },
      "committer": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Fri Aug 16 14:34:53 2013 -0700"
      },
      "message": "Get SEA fibonacci running in interpreter mode.\n\nAndroid.mk: Added new file to build.\ncompile_driver.cc: Moved SE_IR usage test in the block\n         protected by bool compile, which is enabled by\n         adding a sepatate test in IsCnadidateForCompilation.\nclass_linker.cc: Added check in NeedsInterpreter to enable SEA_IR.\nart_method-inl.h: DIsabled check in SEA_IR mode.\nmethod_verifier.cc: Added check for SEA_IR mode.\nmethod_verifier.h: Chenged IsCandidateForCompilation signature to\n         allow testing the function name (for SEA_IR selective\n         compilation).\ndot_gen.h: Updated ART file API usage to altest version.\nsea_ir/frontend.cc: Passing function symbol name to CompileMethod.\ninstruction_Nodes.h: Added  accessor for method index for\n         InvokeStatic IR node.\nsea.cc: Added additional IR SignatureNode for function calls (extra\n         Method parameter). Fixed UnnamedConstant constant value.\nsea.h: Passing function_name to GenerateLLVM.\ntype_inference_visitor.cc: Aded type for first (placeholder) method\n         parameter.\n\nChange-Id: I295858ea0761a3dffb36f35748d8b93d4919d6a9\n"
    },
    {
      "commit": "0f40ac31134d9ae0f059d4c448165599dc8459c1",
      "tree": "2f908f5d7a51d4e7b028b307e5d43a9e794abc10",
      "parents": [
        "97a03e3cc86002b10889562a6b5b164cd2b99e7e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 22:10:30 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 22:30:39 2013 -0700"
      },
      "message": "Fix races in small mode compiler filters setup\n\nFixes host tests in small art mode.\n\nChange-Id: I2579f872583f425607f91c1e58df68b05b5098bb\n"
    },
    {
      "commit": "97a03e3cc86002b10889562a6b5b164cd2b99e7e",
      "tree": "31a25bc1a5e8ab191d101764deabaaa53d37cc26",
      "parents": [
        "1a4d6d809b4c24580b4667e3075d545738d83ec7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 21:33:58 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 21:33:58 2013 -0700"
      },
      "message": "Fix small art build.\n\nChange-Id: Idaade55babbab192c87b32c077d2ec01ac9ef0e2\n"
    },
    {
      "commit": "1d1e267136732c2b123470b05c06fa536fa6dbbb",
      "tree": "a2c4cf3b5ffa7199d38db677886926c0b9a813cf",
      "parents": [
        "a804b711f21db74f9fb0dd7a5854656b1252fb97",
        "ea46f950e7a51585db293cd7f047de190a482414"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Aug 14 02:15:57 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 14 02:15:58 2013 +0000"
      },
      "message": "Merge \"Refactor java.lang.reflect implementation\" into dalvik-dev"
    },
    {
      "commit": "75a43f10f55e2aa550de51e969cc1e60d583b632",
      "tree": "32667690ae49d1168d8310692af915e497a6a392",
      "parents": [
        "5e3572709b5a5d59957f835db4f73760ecef08da"
      ],
      "author": {
        "name": "Anwar Ghuloum",
        "email": "anwarg@google.com",
        "time": "Tue Aug 13 17:22:14 2013 -0700"
      },
      "committer": {
        "name": "Anwar Ghuloum",
        "email": "anwarg@google.com",
        "time": "Tue Aug 13 19:13:59 2013 -0700"
      },
      "message": "Clean up logcat spam from compiler and verifier\n\nMoved to VLOG(...), adding verifer tag for VLOG.\n\nChange-Id: Ia9ac8aeaf5aa1f4881e384003e82a66e560c5692\n"
    },
    {
      "commit": "ea46f950e7a51585db293cd7f047de190a482414",
      "tree": "9dddc8073547a2dcb58a19e1728932a89cb149c3",
      "parents": [
        "5e3572709b5a5d59957f835db4f73760ecef08da"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 30 01:26:50 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 18:09:46 2013 -0700"
      },
      "message": "Refactor java.lang.reflect implementation\n\nCherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1.\n\nMove to ArtMethod/Field instead of AbstractMethod/Field and have\njava.lang.reflect APIs delegate to ArtMethod/ArtField.\n\nBug: 10014286.\n\nChange-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7\n"
    },
    {
      "commit": "08bf1967611965b65ffd5de1aa603b60e7b2d6a8",
      "tree": "a9272c3a767cee878fdad81207bd8037f08dd830",
      "parents": [
        "73a79074c06d8b0a8c14946438c59c3821d88fe7"
      ],
      "author": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Mon Aug 12 08:53:04 2013 -0700"
      },
      "committer": {
        "name": "Dragos Sbirlea",
        "email": "dragoss@google.com",
        "time": "Tue Aug 13 10:09:48 2013 -0700"
      },
      "message": "Work on SMALL_ART and PORTABLE working at the same time.\n\nChange-Id: Iddedf63b6f9d908717a4d30f963e9b81a9604d49\n"
    },
    {
      "commit": "c9f9444a0d58f395fee5ddd9f55ff32f92cb7b57",
      "tree": "2626125a263f8cbb0b733631a7c6fd2a07e9360a",
      "parents": [
        "b0f871965d588cce066785728fb105248b38bb4a",
        "a024a0686c3b0fea13f362bff70d65981e5febc5"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Aug 08 14:01:03 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 08 14:01:03 2013 -0700"
      },
      "message": "am a024a068: Compilation filter\n\n* commit \u0027a024a0686c3b0fea13f362bff70d65981e5febc5\u0027:\n  Compilation filter\n"
    },
    {
      "commit": "a024a0686c3b0fea13f362bff70d65981e5febc5",
      "tree": "99b003e7524544156a4e94bcca7daa41ed4d4b77",
      "parents": [
        "e0a53e99e2a01f8668d6616c3cec7e2f5a711286"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jul 31 10:47:37 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Aug 08 13:30:16 2013 -0700"
      },
      "message": "Compilation filter\n\nThis CL introduces a static compilation filter mechanism intended\nto allow us to reduce compilation time and space requirements until\nwe have a profiling mechanism in place.\n\nIt supports 5 modes of filtering:\n\n   o interpret-only (compile nothing)\n   o deferred-compilation (compile only those methods believe to be\n     compute-intensive)\n   o space (optimized for space)\n   o balanced (best return on space investment)\n   o speed (compile everything)\n\nA future CL will allow the default filtering mode to be set\nvia system property.  For now, you can pass it in via command\nline as follows:\n\n   dalvikvm -compiler-filter:[interpret-only|defer-compilation|\n                              space|balanced|speed]\n\nor dex2oat --runtime-arg -compiler-filter:[one of the above modes]\n\nCreating a file named art/SMALL_ART will force the filter\ndefault to interpret-only.  Later on we\u0027ll move this capability\nto a persistent system property.\n\nor modify kDefaultCompilerFilter in runtime.h\n\nIt also changes the compiler driver to allow the compilers to\ndecline to compile a method by return NULL.\n\nChange-Id: Ic73411818f8bb845a4a19a05b0395c50902c534f\n"
    },
    {
      "commit": "a464748006d101407108c3d9eefd865c44cce695",
      "tree": "090fc2a30d5a0dbbc6fa6c12c432d2f03d27efaa",
      "parents": [
        "9642c96bd5a1ccc4e221de9c0af4a545af8182d2"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Aug 06 15:35:47 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Aug 06 15:35:47 2013 -0700"
      },
      "message": "Verifier checks that primitive put array/field type matches insn type.\n\nChange-Id: Idd68a36d26451459e55fc586bbd1e71c51a81be9\n"
    },
    {
      "commit": "b9c37fb5746cc240e86677e56cb0d74d829e3504",
      "tree": "f10bf94f63ad30aed84826db9a2dd73743152ee8",
      "parents": [
        "99b1c14fc9f517f4882a596958ad2a0977d92daa"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Aug 05 17:47:40 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Aug 05 17:47:40 2013 +0200"
      },
      "message": "Use reader writer mutex for safe checkcast map.\n\nUse a ReaderWriterMutex to protect MethodVerifier::safecast_map_ like\nwhat\u0027s done for MethodVerifier::dex_gc_maps_ and MethodVerifier::devirt_maps_.\n\nChange-Id: Id2ac9c290cc524eb992ea7cabe63766e88753747\n"
    },
    {
      "commit": "fe1f7c84369abbf5a0121557aa0c6c58e9477710",
      "tree": "8dbb3178123556db721a982703260db51c8df1e3",
      "parents": [
        "b24b4a7e0c4f9bbea49f9dd95b2600080c8293d9"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 01 14:50:24 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 01 14:50:24 2013 -0700"
      },
      "message": "Move verification of primitive type puts into helper method.\n\nChange-Id: Ia40d9f85303a52e20ca57acf13a0cfc8a9922024\n"
    },
    {
      "commit": "b24b4a7e0c4f9bbea49f9dd95b2600080c8293d9",
      "tree": "a59863dc34ae5262a418d855fe3f55eeb452b9bd",
      "parents": [
        "8d4fb0eb94ea3dd5db9461230e2c11926e4ebdb4"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jul 31 13:47:31 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 01 13:47:26 2013 -0700"
      },
      "message": "Make verifier allow integral types to be put in integral type arrays.\n\nThis fixes a problem where the verifier was rejecting when an integer\nis put into a byte array. This also more closely matches the RI.\n\nAlso fixes various issues with debugging checks caught by cts.\n\nBug 10097083\n\nChange-Id: Ie816fcdd85d6dc898feffa1e3fea8cfc2c6946ff\n"
    },
    {
      "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"
    }
  ],
  "next": "1212a022fa5f8ef9585d765b1809521812af882c"
}
