)]}'
{
  "log": [
    {
      "commit": "f832284dd847ff077577bb5712225430bbbb3b67",
      "tree": "44f6b91098639c6ebc438b4ec998d0dc128cef9a",
      "parents": [
        "8f0776768712b2021aa8fb649b51017b9f0fc7a9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 16 10:59:25 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun May 18 12:50:33 2014 -0700"
      },
      "message": "Delete ClassHelper and fix compaction bug in GetDirectInterface\n\nCleanup helps to prevent compaction bugs. Fixed a fairly serious\ncompaction error caused by calling ClassHelper::GetDirectInterface\nwithout handling the case where it causes thread suspension due to\nResolveType.\n\nBug: 8981901\n\nChange-Id: I82b3bb6dd48d21eb6ece7aae0733c4a23c2bc408\n"
    },
    {
      "commit": "db2633ce0358c704f97130a94b582602cb01d14a",
      "tree": "ab941b728fe4343eb9872abc85755640bf059800",
      "parents": [
        "f59c6dda4928cfb05d32a56fd161e3f86a9ca560"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 16 09:59:29 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 16 10:36:37 2014 -0700"
      },
      "message": "Change ObjectLock to take Handle instead of Handle pointer.\n\nChange-Id: I9abdcdc5c9c9174634336b9250ab24c6aee434ec\n"
    },
    {
      "commit": "eb8167a4f4d27fce0530f6724ab8032610cd146b",
      "tree": "bcfeaf13ad78f2dd68466bbd0e20c71944f7e854",
      "parents": [
        "6fb66a2bc4e1c0b7931101153e58714991237af7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 07 15:43:14 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 13 14:45:54 2014 -0700"
      },
      "message": "Add Handle/HandleScope and delete SirtRef.\n\nDelete SirtRef and replaced it with Handle. Handles are value types\nwhich wrap around StackReference*.\n\nRenamed StackIndirectReferenceTable to HandleScope.\n\nAdded a scoped handle wrapper which wraps around an Object** and\nrestores it in its destructor.\n\nRenamed Handle::get -\u003e Get.\n\nBug: 8473721\n\nChange-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a\n"
    },
    {
      "commit": "151f2214d95f6003fe067fa2ebcd8ddad11e735c",
      "tree": "0b9d01940d0f483526134e5e1136e69ce9db3c6f",
      "parents": [
        "36b65964d128471d917c2efc69c81bc50ef9360b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue May 06 11:27:27 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue May 06 14:42:27 2014 -0700"
      },
      "message": "Improve ValidateSuperClassDescriptors performance.\n\nValidateSuperClassDescriptors uses FindClass with the 2 class loaders that are\nbeing used in validating method parameter types. The use of 2 class loaders\nensures at least one miss with LookupClass and thereby a call to\nClassLoader.loadClass which will then defer to the parent class loader eating\ntime. This change modifies the behavior to instead lookup types with a dex\ncache, so that resolution and load class are only performed once per type.\n\nBug: 12804658\nChange-Id: Ia7be1f7bab8175a6934fd59fc54e0829beed0198\n"
    },
    {
      "commit": "80989a6bf3e24b31c7210c76be81ad40f43c63be",
      "tree": "6e3365de360d3d02c14ce614e1755620e8b9f7bb",
      "parents": [
        "a708e32a9f764a48175e705ec4bcd2201c84f492"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 01 14:39:44 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 01 15:20:11 2014 +0200"
      },
      "message": "Fix ClassHelper::GetDirectInterface for proxy class\n\nReturns only the direct interfaces implemented by the proxy class. We collect\nthem from the \"interfaces\" field in the synthesized proxy class instead of\nlooking into the iftable.\n\nAlso updates proxy_test to reflect this change.\n\nBug: 13689930\nChange-Id: I926e2ed30f9e65972d700a378671cec82dedaa7c\n"
    },
    {
      "commit": "53b8b09fc80329539585dcf43657bc5f4ecefdff",
      "tree": "cac0f82fbb89bd907104e3fed6c36203e11a3de0",
      "parents": [
        "0dea9872082bc3e576ed6cefed86b0d6c0c45ffd"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 13 23:45:53 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Mar 14 11:28:10 2014 -0700"
      },
      "message": "Refactor reflective method invocation.\n\nMove invocation code out of JNI internal into reflection, including ArgArray\ncode. Make reflective invocation use the ArgArray to build arguments rather\nthan allocating a jvalue[] and unboxing arguments into that.\nMove reflection part of jni_internal_test into reflection_test.\nMake greater use of fast JNI.\n\nChange-Id: Ib381372df5f9a83679e30e7275de24fa0e6b1057\n"
    },
    {
      "commit": "3314dcf81d116c3142520970286ffaede67ab522",
      "tree": "424291dddb6c7c3458c33771b6f979035a8e60c4",
      "parents": [
        "cd4f41a667b5eee6b12ec1cbec1912024b3b122e",
        "b7054baf28d4d652fbd98a94b089344a31898d53"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 13 16:16:13 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 13 16:16:14 2014 +0000"
      },
      "message": "Merge \"Fix debugger crashes in presence of proxy objects.\""
    },
    {
      "commit": "b7054baf28d4d652fbd98a94b089344a31898d53",
      "tree": "54d2548fab1faa859d6e610d03881e71074b1cb7",
      "parents": [
        "37d4c1db4d705f5a28001f65afdd68d0527948d8"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 13 11:52:31 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 13 15:11:19 2014 +0100"
      },
      "message": "Fix debugger crashes in presence of proxy objects.\n\nFix ClassHelper::NumDirectInterfaces to use IfTable::Count instead of the\niftable array\u0027s length (which is twice the interface count). This happens when\nprocessing ReferenceType::Interfaces command and was causing a crash.\n\nReturn ABSENT_INFORMATION error code when we\u0027re asked for the source file of a\nproxy class. Otherwise we call ClassHelper::GetSourceFile which expect the\nclass has a corresponding ClassDef item in the DEX file which is not true for\nproxy classes.\n\nAdd new proxy_test to check ClassHelper works correctly with proxy classes.\n\nBug: 13426918\nChange-Id: I5c1212b1a697dd7dc1ab18e99552ee113c533a5a\n"
    },
    {
      "commit": "36fea8dd490ab6439f391b8cd7f366c59f026fd2",
      "tree": "6720290f54717f7cee1116103cd1839147936146",
      "parents": [
        "63dcdff34c40a64df6939ea5bba71813abd2acd3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 10 13:37:40 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Mar 12 15:16:12 2014 -0700"
      },
      "message": "Fixing structure of native frame for Generic JNI\n\nThis changes the layout of the callee-save frame used in generic\nJNI to be consistent with the JNI compiler, that is, the SIRT is\ninline (above the method reference). Now the location of the\n\"this\" object is consistent.\n\nChange-Id: Ibad0882680712cb640b4c70ada0229ef7cf4e62c\n"
    },
    {
      "commit": "c645f1ddb7c40bea6a38eda4b3f83f6b6dec405b",
      "tree": "de6141864c1c011216c19dd99a2c1e2bc442dd6d",
      "parents": [
        "a9d7be62735e3356cef7e8ed797c519134a17061"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 06 18:11:53 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 07 12:09:04 2014 -0800"
      },
      "message": "Add more VerifyObject calls.\n\nAdded verify object calls to SirtRef, IndirectReferenceTable,\nReferenceTable.\n\nRemoved un-needed verify object in ScopedObjectAccess / DecodeJObject\nsince object sources are handled.\n\nBug: 12934910\nChange-Id: I55a46a8ea61fed2a77526eda27fd2cce97a9b125\n"
    },
    {
      "commit": "9837939678bb5dcba178e5fb00ed59b5d14c8d9b",
      "tree": "00f0e6b54d7c4cac78a02752e268724157e50b6e",
      "parents": [
        "3fcf18e25241253f23efbeebe77b2a4c4a7c54d3"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 24 16:53:16 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 24 18:47:23 2014 -0800"
      },
      "message": "Avoid std::string allocations for finding an array class.\n\nIntroduce ClassLinker::FindArrayClass which performs an array class lookup\ngiven the element/component class. This has a 16 element cache of recently\nlooked up arrays.\nPass the current thread to ClassLinker Find .. Class routines to avoid calls\nto Thread::Current().\nAvoid some uses of FindClass in the debugger where WellKnownClasses is a\nfaster and more compacting GC friendly alternative.\n\nChange-Id: I60e231820b349543a7edb3ceb9cf1ce92db3c843\n"
    },
    {
      "commit": "bbcc0c0a17262f3d2a70fc0a82e1783862f708cc",
      "tree": "ccb113f6c8532d5656b2f38e464d1e1086d9d0de",
      "parents": [
        "0a07f9391e9bef0f49bd3623892f9cf3d77c14a1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 03 14:08:42 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 11 18:14:58 2014 +0000"
      },
      "message": "Speed up method lookup in a different dex file.\n\nUse already known name and proto.\n\nChange-Id: I4505b81724bd6a0f3cf21ee6fed44774d38c4e15\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": "e6da9af8dfe0a3e3fbc2be700554f6478380e7b9",
      "tree": "127a0565fce79f05d82d0ff242fbbffa6e2bc6b3",
      "parents": [
        "977d409b959497eecc44a35cff16115d0f04ccab"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 16 11:54:42 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 08 14:16:12 2014 -0800"
      },
      "message": "Background compaction support.\n\nWhen the process state changes to a state which does not perceives\njank, we copy from the main free-list backed allocation space to\nthe bump pointer space and enable the semispace allocator.\n\nWhen we transition back to foreground, we copy back to a free-list\nbacked space.\n\nCreate a seperate non-moving space which only holds non-movable\nobjects. This enables us to quickly wipe the current alloc space\n(DlMalloc / RosAlloc) when we transition to background.\n\nAdded multiple alloc space support to the sticky mark sweep GC.\n\nAdded a -XX:BackgroundGC option which lets you specify\nwhich GC to use for background apps. Passing in\n-XX:BackgroundGC\u003dSS makes the heap compact the heap for apps which\ndo not perceive jank.\n\nResults:\nSimple background foreground test:\n0. Reboot phone, unlock.\n1. Open browser, click on home.\n2. Open calculator, click on home.\n3. Open calendar, click on home.\n4. Open camera, click on home.\n5. Open clock, click on home.\n6. adb shell dumpsys meminfo\n\nPSS Normal ART:\nSample 1:\n    88468 kB: Dalvik\n     3188 kB: Dalvik Other\nSample 2:\n    81125 kB: Dalvik\n     3080 kB: Dalvik Other\n\nPSS Dalvik:\nTotal PSS by category:\nSample 1:\n    81033 kB: Dalvik\n    27787 kB: Dalvik Other\nSample 2:\n    81901 kB: Dalvik\n    28869 kB: Dalvik Other\n\nPSS ART + Background Compaction:\nSample 1:\n    71014 kB: Dalvik\n     1412 kB: Dalvik Other\nSample 2:\n    73859 kB: Dalvik\n     1400 kB: Dalvik Other\n\nDalvik other reduction can be explained by less deep allocation\nstacks / less live bitmaps / less dirty cards.\n\nTODO improvements: Recycle mem-maps which are unused in the current\nstate. Not hardcode 64 MB capacity of non movable space (avoid\nreturning linear alloc nightmares). Figure out ways to deal with low\nvirtual address memory problems.\n\nBug: 8981901\n\nChange-Id: Ib235d03f45548ffc08a06b8ae57bf5bada49d6f3\n"
    },
    {
      "commit": "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": "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": "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": "88474b416eb257078e590bf9bc7957cee604a186",
      "tree": "7c59aa370bec9b0f2d37cb7a96d3b2effb3d92ce",
      "parents": [
        "9780099e445884d8bc9444c8c1261b02d80a26c7"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Oct 23 16:24:40 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Oct 29 12:01:28 2013 -0700"
      },
      "message": "Implement Interface Method Tables (IMT).\n\nChange-Id: Idf7fe85e1293453a8ad862ff2380dcd5db4e3a39\n"
    },
    {
      "commit": "83883d7fddf30fdb8b6903560fa1337ab991e74c",
      "tree": "d08809deef3a4ab19a57dd4e2ed629a79b60ce74",
      "parents": [
        "8584a68279efc0f9a409a3555ae5ebf3ec2cc4ac"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 21 21:07:24 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 25 14:22:26 2013 -0700"
      },
      "message": "Populate dex cache for sharpened calls.\n\nWe ensured the resolved method was in the dex cache, but for a sharpened call\nthis is abstract. Ensure that the concrete method is also resolved.\nLimit the use of direct dex cache based dispatch to cases where we know how to\npatch the dex cache.\n\nBug 11389002\n\nChange-Id: I08252686a53b5948650632837c74bcd5cbf8a862\n"
    },
    {
      "commit": "241b5de2d3cf06868ac31f1153aa0b32ddb07b20",
      "tree": "6161a90ea504c3907d171f16ca7d94817bbf8b9a",
      "parents": [
        "252a00273bc945ebe4a1d77d82d085fdff2ae769"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 09 17:58:57 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 10 17:26:04 2013 -0700"
      },
      "message": "Clinits may not have the kAccConstructor flag.\n\nBug: 11157540\nSet the clinit access flag when we load the method and warn about badly\nformed access flags.\n\nChange-Id: I515c692095051f84f98510722ab764591185918e\n"
    },
    {
      "commit": "d9c4fc94fa618617f94e1de9af5f034549100753",
      "tree": "1305efbbc3d4bc306c0947bb6d4b01553667f98e",
      "parents": [
        "7ef126ce0593929bcf8fb73d8b1119ce3b95b3f2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 01 19:45:43 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 02 09:31:55 2013 -0700"
      },
      "message": "Inflate contended lock word by suspending owner.\n\nBug 6961405.\nDon\u0027t inflate monitors for Notify and NotifyAll.\nTidy lock word, handle recursive lock case alongside unlocked case and move\nassembly out of line (except for ARM quick). Also handle null in out-of-line\nassembly as the test is quick and the enter/exit code is already a safepoint.\nTo gain ownership of a monitor on behalf of another thread, monitor contenders\nmust not hold the monitor_lock_, so they wait on a condition variable.\nReduce size of per mutex contention log.\nBe consistent in calling thin lock thread ids just thread ids.\nFix potential thread death races caused by the use of FindThreadByThreadId,\nmake it invariant that returned threads are either self or suspended now.\n\nCode size reduction on ARM boot.oat 0.2%.\nOld nexus 7 speedup 0.25%, new nexus 7 speedup 1.4%, nexus 10 speedup 2.24%,\nnexus 4 speedup 2.09% on DeltaBlue.\n\nChange-Id: Id52558b914f160d9c8578fdd7fc8199a9598576a\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": "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": "e4ef0953b6a27f00a93b4807cd1ff668f4fbeb22",
      "tree": "76f985d763a895c59c4a1e9f70a3f7d58cc6b9a3",
      "parents": [
        "b605a4f9a8797046ea1aa05f3405a77fb9a80a76"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 24 07:31:04 2013 +0000"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 24 07:31:04 2013 +0000"
      },
      "message": "Revert \"Avoid std::string allocations in HasSameNameAndSignature.\"\n\nThis reverts commit b605a4f9a8797046ea1aa05f3405a77fb9a80a76.\n\nChange-Id: I4f185a1ea1e453fcff5325062be8ff1d8af20396\n"
    },
    {
      "commit": "b605a4f9a8797046ea1aa05f3405a77fb9a80a76",
      "tree": "1173f9c050d1bae8bdf8ba8950e0995c42fc97ba",
      "parents": [
        "2e2deeb6df3e5a952c194276146706e63ab644a1"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Sep 23 12:57:09 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Sep 23 12:57:09 2013 -0700"
      },
      "message": "Avoid std::string allocations in HasSameNameAndSignature.\n\nCreating a signature requires a std::string that\u0027s only used for the purpose of\na comparison. Avoid the std::string by comparing the elements of the method\u0027s\nproto_ids.\n\nChange-Id: I4394df2ac20bb5896936954f68937fad7e9f7e91\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": "ea46f950e7a51585db293cd7f047de190a482414",
      "tree": "9dddc8073547a2dcb58a19e1728932a89cb149c3",
      "parents": [
        "5e3572709b5a5d59957f835db4f73760ecef08da"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 30 01:26:50 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 18:09:46 2013 -0700"
      },
      "message": "Refactor java.lang.reflect implementation\n\nCherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1.\n\nMove to ArtMethod/Field instead of AbstractMethod/Field and have\njava.lang.reflect APIs delegate to ArtMethod/ArtField.\n\nBug: 10014286.\n\nChange-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7\n"
    },
    {
      "commit": "848871b4d8481229c32e0d048a9856e5a9a17ef9",
      "tree": "4be4602e3becc899f76a29a87618801458fe04b9",
      "parents": [
        "423fb4d70f2ac36bf9f630146b4150771a8e7e76"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Aug 05 10:56:33 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Aug 07 22:17:00 2013 -0700"
      },
      "message": "Entry point clean up.\n\nCreate set of entry points needed for image methods to avoid fix-up at load time:\n - interpreter - bridge to interpreter, bridge to compiled code\n - jni - dlsym lookup\n - quick - resolution and bridge to interpreter\n - portable - resolution and bridge to interpreter\n\nFix JNI work around to use JNI work around argument rewriting code that\u0027d been\naccidentally disabled.\nRemove abstact method error stub, use interpreter bridge instead.\nConsolidate trampoline (previously stub) generation in generic helper.\nSimplify trampolines to jump directly into assembly code, keeps stack crawlable.\nDex: replace use of int with ThreadOffset for values that are thread offsets.\nTidy entry point routines between interpreter, jni, quick and portable.\n\nChange-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e\n"
    },
    {
      "commit": "fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d",
      "tree": "5fc7f5b941724a62f8e3411df09fae431ff5e3cf",
      "parents": [
        "56d947fbc9bc2992e2f93112fafb73e50d2aaa7a"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 14:40:12 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 16:49:05 2013 -0700"
      },
      "message": "Fix multiple inclusion guards to match new pathnames\n\nChange-Id: Id7735be1d75bc315733b1773fba45c1deb8ace43\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": "9a916d3c0d0574d106c764e737c67b52988d6139",
      "tree": "759e3f6152e80ad08ba220692d30252c1f10bf7e",
      "parents": [
        "0b4e3ef67508a0b8c121b6b26ab5ea0a1d8e7141"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Jun 27 18:45:37 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Jul 02 14:12:36 2013 -0700"
      },
      "message": "Add marks for instrumentation frames that get interpreted.\n\nDuring instrumentation, if a method goes to the interpreter, a special callee-\nsave ref and args method frame is pushed onto the stack, instead of a frame for\nthe method being called. This change adds a bool to mark methods that end up\ninterpreted, so things that walk the stack know to look for the callee-save\nmethod instead.\n\nAlso included is a change to UnsafeLogFatalForThreadSuspendAllTimeout to prevent\nit from grabbing locks before dumping. This was breaking DumpLocked, which\neventually gets a ScopedObjectAccessUnchecked requiring those locks not be held.\n\nChange-Id: I7e68cf195c77f40df6f497551c94b0926d3c5065\n"
    },
    {
      "commit": "50239c75041df9e12f9cbb018ccc08af6890e102",
      "tree": "d24894d80ecc9b14d6f1e9c1b89f1647ed7ede34",
      "parents": [
        "7761cb669da36384df8c449c864f826ae3db6ac8"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jun 17 14:53:22 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jun 17 14:53:22 2013 -0700"
      },
      "message": "Avoid resolution for field types in image dumping.\n\nBug seen when dumping EMPTY_TABLE of java.util.HashMap as EMPTY_TABLE has type\njava.util.Map$Entry[] which isn\u0027t in the boot image, but the value has type\njava.util.HashMap$HashMapEntry[] which is.\n\nChange-Id: Ia0bd445c6f5bb5837a92e6c2b2f4207e89b872f4\n"
    },
    {
      "commit": "d8274bcbc565fff1254574b3cbf46dc4e7b52812",
      "tree": "f3435a06f129a1620212b0253074df2292c976cb",
      "parents": [
        "fa46d3ee8cba2985c5c8bdfe47d15daf0613ebdc"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed May 15 15:54:45 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed May 15 15:54:45 2013 -0700"
      },
      "message": "Fix clang build issues.\n\nAlso add PREAMBLE macro to allow head of interpreter loop to be simply hoisted.\n\nChange-Id: Id4a3f81d56b5981e1a497cf2bc72f1c263364fe5\n"
    },
    {
      "commit": "0920163b0ee4ce3fbf57db5506659de14b77be75",
      "tree": "b098097d5e8477a200d158f92c1153f12c6f6d55",
      "parents": [
        "449db33fafa29578df60e8a323f78d5eb6247e76"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 15 15:50:07 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 15 15:50:07 2013 -0700"
      },
      "message": "Fix ObjectReference.InvokeMethod.\n\nThis probably broke when I rewrote the object registry, but because\nthe test was so crap, we may have gotten away with passing bad pointers.\n(Though for me, CheckJNI was catching this.)\n\nWhile I\u0027m here, fix the argument checking, which was previously\nvery weak; we\u0027d accept any reference type rather than instances of\nthe parameter\u0027s specific type.\n\nChange-Id: I08c001cabde02a0509fe28df17523a2d2519d1ca\n"
    },
    {
      "commit": "6474d190d5604898354ebf767f1944b6e3e9b445",
      "tree": "ac4be675c62fd8129fe85f740dcd2e3bfee424e2",
      "parents": [
        "52003fe9e2020e9d68cee1300fdb4a3f55be85a5"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Mar 26 14:08:09 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Mar 26 16:03:53 2013 -0700"
      },
      "message": "Remove use of compiled invoke stubs from portable.\n\nNow the invoke stubs can be safely removed. Tested and working on ARM,\nbasic testing done on x86/MIPS, but portable is currently broken for them\neven without the change.\n\nChange-Id: Ib73f2b7aa9d81f5f0e1e817d16b9bec464c5a5aa\n"
    },
    {
      "commit": "4f6ad8ab428038129b2d0d6c40b7fd625cca15e1",
      "tree": "d1025ed9203d0cdf7aa959d9cecd8dc1f0c0bfeb",
      "parents": [
        "aabe8adacc7bf3a8ab6f6f3dd37fc839b6fd762f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 18 15:27:28 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 18 15:29:59 2013 -0700"
      },
      "message": "Various performance improvements.\n\nPerformance had regressed due to verify object and method invocation changes.\nAvoid trampolines for static calls in same class.\nVarious inlining changes.\nMake verify object something that\u0027s only compiled-in in debug builds.\n\nChange-Id: Ia261a52232c3b10667c668f8adfadc0da3048bc5\n"
    },
    {
      "commit": "5d9173014c1ca09f7249a6b07629aa37778b5f8f",
      "tree": "80543dbe9af6795212373bb12532b638ff3b22f3",
      "parents": [
        "aed0716b9592bb3095cdfc4b111011f9ed74877d"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Feb 27 17:57:33 2013 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Mar 15 14:18:28 2013 -0700"
      },
      "message": "Changes to remove need for compiled invoke stubs for quick.\n\nARM, x86, and MIPS implementation complete, though MIPS is untested.\n\nThe ArgArray is changed to be a uint32_t array instead of a JValue array.\nAlso, a separate result for float/double was needed for x86/MIPS. The invoke\nstubs are currently still there, but only used for portable.\n\nChange-Id: I0647f8d5d420cea61370e662e85bdc0c13b5e378\n"
    },
    {
      "commit": "05f3057d6a4d23d712092ccd36a531590bff323b",
      "tree": "3f342c813afdb44a08466e379c060f917d073e5a",
      "parents": [
        "4aeb567fa8b1f5e17ef7beacf86fed505cc7335c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 20 12:13:11 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 20 12:15:09 2013 -0800"
      },
      "message": "Move monitor related object routines to object-inl.h\n\nAlso pass through readily available self Thread. Remove unused wait method.\nRename ObjectLock.Wait to document it doesn\u0027t honor interrupts.\n\nChange-Id: I991e5036997b3f60ee4fdf1a420beabab9a70c85\n"
    },
    {
      "commit": "2dd0e2cea360bc9206eb88ecc40d259e796c239d",
      "tree": "9d619dc9508cbe73e4793bf6f08cbc761abfb48a",
      "parents": [
        "ac21b797b3a425975d656d6b84a7b24401d35f42"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 24 12:42:14 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jan 30 16:48:31 2013 -0800"
      },
      "message": "Directory restructuring of object.h\n\nBreak object.h into constituent files.\nReduce number of #includes in other GC header files.\nIntroduce -inl.h files to avoid mirror files #include-ing each other.\nCheck invariants of verifier RegTypes for all constructors.\n\nChange-Id: Iecf1171c02910ac152d52947330ef456df4043bc\n"
    },
    {
      "commit": "af6e67a4816d2593586115b89faa659225363246",
      "tree": "e3b330d6ed994f82972da4e5b8c3d06be2c66eae",
      "parents": [
        "a6f3aaf8ca5385d870c35d1555b7787d56a70c95"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jan 16 08:38:37 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jan 16 15:37:56 2013 -0800"
      },
      "message": "Further proxy refactorings.\n\nFactor the crawling of the quick stack arguments into a common visitor.\nFactor the proxy invocation dispatch into common runtime support code,\nfix numerous bugs relating to GC in the LLVM runtime support with this.\nClean up BoxPrimitive to not use an in argument as an out.\n\nChange-Id: I7b12c8d88d5083614e480b8fb1d2f2ef7c0a51b7\n"
    },
    {
      "commit": "4cd121ef0cb35fced70c7d9de378277be7a727d9",
      "tree": "c786e70cfe50147749d9dd7494dd7112271c8f60",
      "parents": [
        "1a25aa432314bcf008c11e3514afc0b7aeb64d5c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 07 17:35:41 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 08 11:06:02 2013 -0800"
      },
      "message": "Implement the Thread.sleep native method.\n\nThis makes returning TS_SLEEPING from JDWP simple and cheap, and\nmakes the stack dumps for sleeping threads more easily understood\nby app developers (because there\u0027s no Object.wait magic going, and\nthe thread state is \"Sleeping\" rather than \"TimedWaiting\").\n\nAlso make Object.wait() a native method in its own right, so every call into\nMonitor::Wait can explicitly pass the most appropriate ThreadState: kSleeping,\nkWaiting, or kTimedWaiting.\n\nAlso add Thread.sleep and Object.wait(long, int) calls to the ThreadStress test.\n\nChange-Id: I49adb45dbcd669eba7cf3def45e6cbfc461a3254\n"
    },
    {
      "commit": "0a9bb73c70298922ad33d67c209a4e440b216fa2",
      "tree": "b9c0597fb54ac4329ef3f6ffeb09531b53efb73c",
      "parents": [
        "449a49bedfb72f0d5643977a99346935f1b33c55"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Mon Nov 26 12:28:49 2012 -0800"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Mon Nov 26 12:28:49 2012 -0800"
      },
      "message": "Fixed access checks on class resolution in interpreter.\n\nAlso made interpreter throw AbstractMethodError when interpreting\nabstract methods.\n\nChange-Id: Id6396fd31e500613150407d0281383b556de9605\n"
    },
    {
      "commit": "2fa6b2e2fc3d2a2fc27808ce518dc76b80ce369a",
      "tree": "daba5f5e64409452e31ae42e3b1b6b6491ccb007",
      "parents": [
        "6ed960d260d0ec3cbbef455c646ccd47f4e78119"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 17 00:10:17 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 26 16:12:59 2012 -0700"
      },
      "message": "Interpreter.\n\nThe opcodes filled-new-array and packed-switch aren\u0027t implemented but\nare trivial given that they are variants of implemented opcodes.\nRefactor Field::Get routines to take the declaring class in the case of\nstatic field accesses. This avoids a check on every use of a field.\nRefactor arg array builder to be shared by JNI invokes and invocations\ninto the interpreter.\nFix benign bug in const decoding in the verifier.\n\nChange-Id: I8dee6c1f4b7f033e6c003422c56e9471cfaccda8\n"
    },
    {
      "commit": "9bc81918a2c663339f7739d9cf968f354506e3a7",
      "tree": "372dc5beb2969c5467d1553cee583130085e442f",
      "parents": [
        "3cc3981018b0eb2c4f1b05ed620d8aad36098e7e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 11 21:43:36 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 11 22:56:17 2012 -0700"
      },
      "message": "Flatten interface entries into the iftable.\n\nAvoid an indirection when scanning the iftable by inlining the interface\nentry into the iftable.\nCopy the iftable for marker interfaces from parents to their children\n(for example for exceptions).\nDon\u0027t allocate method arrays for 0 element interface method tables.\n\nChange-Id: I8402960d4ddbe4b1ffd335ed4ce4b4825210fd0d\n"
    },
    {
      "commit": "4445a7e3398a6143939168097a3aa275b734504d",
      "tree": "9eda34219b4a840125694a86ddba49077e15b944",
      "parents": [
        "50b35e2fd1a68cd1240e4a9d9f363e11764957d1"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 05 17:19:13 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Oct 06 09:48:02 2012 -0700"
      },
      "message": "Class clean-up.\n\nMove Class code out of native and into Java.\nRemove ClassLinker::FindDexFile.\n\nChange-Id: Idd9c4563d2c32e76690675242ff491276ace9848\n"
    },
    {
      "commit": "50b35e2fd1a68cd1240e4a9d9f363e11764957d1",
      "tree": "4f3c58b7b293380f19e4f33357cb352e3330772e",
      "parents": [
        "8e9a1497f0d7da4d55f6e7ed8a7d96ba6db7222d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 04 10:09:15 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 05 11:07:39 2012 -0700"
      },
      "message": "Explicitly pass Thread::Current to MutexLock and Alloc.\n\nChange-Id: I8b75bc0617915465f102815b32306aa7760dcae4\n"
    },
    {
      "commit": "1f5393447b9f45be7918042d9ee7b521376de866",
      "tree": "1793cb0ae00b38a63f8cfd3a25b6cb0ee4edca16",
      "parents": [
        "870ea4772199f8d4cbd9a269f9093620ee50a59c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 03 21:09:42 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 04 09:27:04 2012 -0700"
      },
      "message": "Make PopSirt inlinable, pass self to SirtRef.\n\nChange-Id: Ieb91526b1cb1f8644ceb3c5b99649f658f43bbc1\n"
    },
    {
      "commit": "66f19258f9728d4ffe026074d8fd429d639802fa",
      "tree": "fd94009774c6cbbb1528ea096e606133bd35f104",
      "parents": [
        "a5e1e3d153990845d80cb8d013157210f11a473c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 18 08:57:04 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 21 17:32:56 2012 -0700"
      },
      "message": "Change dex cache to be java object instead of array, add pointer to dex file in dex cache.\n\nGeneric clean up to facilitate having GDB macros for Pretty* helper functions.\n\nImproved cleanliness of DexCache since having it as an object array was not the best solution.\n\nFixed a bug in InOrderWalk caused by ResolveType sometimes allocating classes.\n\nRename C++ Method to AbstractMethod and add two new classes Constructor, Method which both inherit from AbstractMethod.\n\nRename done to have the C++ code be closer to the java code.\n\nChange-Id: I4995b4c5e47a3822192b08afa24a639d3b1f4da9\n"
    },
    {
      "commit": "b726dcb581bf72da46527378ccb6889020f0e6e9",
      "tree": "c0383ed788652926e93147e50d659ed226519548",
      "parents": [
        "fd678beb171a4686a4f2d53ca4188a4ade8fa54e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 05 08:57:23 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 05 09:06:19 2012 -0700"
      },
      "message": "Rename GlobalSynchronization to Locks\n\nAlso address some review comments in common_throws relating to\nToStr\u003cInvokeType\u003e and exception detail messages.\n\nChange-Id: Ibf2c0f147689fa236d349bd7f01eed3c2522552b\n"
    },
    {
      "commit": "00f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abac",
      "tree": "6a2172ece15c4699e6c2a67ce76f019db0a9a21d",
      "parents": [
        "634ea28f78c4a138e6a1de54eae8696095422415"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 19 15:28:27 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 14 10:45:52 2012 -0700"
      },
      "message": "Global lock levels.\n\nIntroduce the notion of the mutators/GC being a shared-exclusive (aka\nreader-writer) lock. Introduce globally ordered locks, analysable by\nannotalysis, statically at compile time. Add locking attributes to\nmethods.\n\nMore subtly, remove the heap_lock_ and split between various locks that\nare held for smaller periods (where work doesn\u0027t get blocked). Remove\nbuggy Dalvik style thread transitions. Make GC use CMS in all cases when\nconcurrent is enabled. Fix bug where suspend counts rather than debug\nsuspend counts were sent to JDWP. Move the PathClassLoader to\nWellKnownClasses. In debugger refactor calls to send request and\npossibly suspend. Break apart different VmWait thread states. Move\nidentity hash code to a shared method.\n\nChange-Id: Icdbfc3ce3fcccd14341860ac7305d8e97b51f5c6\n"
    },
    {
      "commit": "ca190666fb11820153f74274c495ba1f913d8a69",
      "tree": "cc813b9fd3b0ad38cec0e6952bcbbbbce78494f9",
      "parents": [
        "1fb3bd3559eb6fc34f7ba429adf9bb15c05939b0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jun 26 15:45:57 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jun 26 19:50:52 2012 -0700"
      },
      "message": "Fix initializer lists to be Google C++ style.\n\nChange-Id: Iada52ea5cf95492684033993b3299042bdaf6cee\n"
    },
    {
      "commit": "0399dde18753aa9bd2bd0d7cf60beef154d164a4",
      "tree": "ea88327c01ca321074aaa59b97e4c54348802937",
      "parents": [
        "de5705dcf4ab5f92d48e144bcd7b59f7bcd18e16"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 06 17:09:28 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 21 22:11:24 2012 -0700"
      },
      "message": "Remove Frame, merge shadow and quick representations.\n\nChange-Id: I5ae03a5e52111792d2df7e83cbd89ab25777844b\n"
    },
    {
      "commit": "a21039c3ae2b20e44ceb2735251c04d0aac89afd",
      "tree": "66b6fa437e7e4286b50bdef224500f9049633701",
      "parents": [
        "3d9d49fa2d025a041f57ea306ea551ef990177db"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 21 12:09:25 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 21 13:04:41 2012 -0700"
      },
      "message": "Fix a bunch more lint.\n\n(If you ignore the compilers, we\u0027ve got relatively little lint now. Fits on\na single screen.)\n\nChange-Id: I51389002894d4fd8cf46f79d2bac57079322a030\n"
    },
    {
      "commit": "d24e264ff85ad8c6f142ac6d33055fdc1881fa2f",
      "tree": "37e1ba1dd328828205e5c9340ae64eddd915a154",
      "parents": [
        "d06dfe7b09de95c035fa736d2b62aa9fee2347b5"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 06 21:21:43 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 06 22:57:13 2012 -0700"
      },
      "message": "Fix recursive static field lookup.\n\nChange-Id: I892696e6e98be9f31a7900d10130cae204f9127a\n"
    },
    {
      "commit": "ad0b3a35857d2cd2db720028ebc51176191e2219",
      "tree": "e6cfbb8a5c9e6127796e0dd5912787416ec87bfd",
      "parents": [
        "174651dea03956e160a2cff0d842954823c49134"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Apr 16 14:50:24 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Fri Apr 20 19:01:23 2012 -0700"
      },
      "message": "Support for a set of verifier failures.\n\n(cherry picked from commit 0d60484cbb0c70acc60965b015e94c2e9cb9f1e7)\n\nChange-Id: I70eb1121390305c436a2bed2c7835c870c0c3972\n"
    },
    {
      "commit": "e1758feb293c7ff67d6fe59dbc31af0811863ce5",
      "tree": "eebf758848f8f4cd8dcb2f3a8299a6f98412e0f8",
      "parents": [
        "0d60484cbb0c70acc60965b015e94c2e9cb9f1e7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Apr 19 11:31:15 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 19 11:31:15 2012 -0700"
      },
      "message": "Revert \"Support for a set of verifier failures.\"\n\nThis reverts commit 0d60484cbb0c70acc60965b015e94c2e9cb9f1e7"
    },
    {
      "commit": "0d60484cbb0c70acc60965b015e94c2e9cb9f1e7",
      "tree": "2b6e289a5f507590722f66d0a157fa5b293cd78f",
      "parents": [
        "a7e6cb4efd9384ac1520976f2d620c72bb08b758"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Apr 16 14:50:24 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Apr 18 17:45:18 2012 -0700"
      },
      "message": "Support for a set of verifier failures.\n\nChange-Id: Idd0f8944bde7ee27271c3f68a2141b5a5265c382\n"
    },
    {
      "commit": "01e076ec18143f4d46775b53c109e1b5e53d96e1",
      "tree": "75cfd810bf53c66961e477abe3d0ffcd14384211",
      "parents": [
        "e77be401064117032b7c4bbad3f897f5c0b23a26"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Mar 30 11:54:16 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Mar 30 11:54:38 2012 -0700"
      },
      "message": "Do not reset SirtRef pointing to a live object\n\nClassLinker::FindClass reset the klass SirtRef to point to the\nexisting Class value. However, the old value was still referenced by\nthe ObjectLock. In the rare case of a two thread resolving the same\nclass at the same time and a garbage collection happening, the\nObjectLock would point to freed memory.\n\nChange-Id: I93dbbfe3e5d7a8922464242270ac90c71a125e47\n"
    },
    {
      "commit": "e77be401064117032b7c4bbad3f897f5c0b23a26",
      "tree": "b00ba26994afbb23a6d22c615153c2a02a3a583e",
      "parents": [
        "93235f7b6ff000c80acf25cc998b853449c68c77"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Mar 30 01:08:38 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Mar 30 01:08:38 2012 -0700"
      },
      "message": "More ClassHelper class validation\n\nChange-Id: Id66d68785b4224c2149bef44c65344c0a60b6a69\n"
    },
    {
      "commit": "93235f7b6ff000c80acf25cc998b853449c68c77",
      "tree": "a8f7eb2a38c8e686813ba57b41d8ac4b8ed5ad4a",
      "parents": [
        "b06cdefa11fd5088b8a423beec14d625f33d0205"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Mar 29 22:48:15 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Mar 29 22:48:15 2012 -0700"
      },
      "message": "Dump current klass_ on bad ChangeClass\n\nChange-Id: Idbe55d7e00a4b40993e6382b2bcfbb34ac39cc41\n"
    },
    {
      "commit": "64277f38032208a0c1081ff9e466c04009b96383",
      "tree": "a7c2e92907584521c1caedbf5e6a798f5984c9e9",
      "parents": [
        "6e41d42f6b7977325a87a125c344c1c9cdf6c949"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Mar 26 23:53:34 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Mar 27 00:03:43 2012 -0700"
      },
      "message": "Additional check to catch BooksTablet monkey issue\n\nChange-Id: I9dfe695b008b2ca23998d2cfb29e5ba04354a029\n"
    },
    {
      "commit": "81ff3184e7eb8de4605c7646674ea4f9fa29b5f3",
      "tree": "eaf443fcc575d3a793af3ab3e435211981a1c1b1",
      "parents": [
        "5147733292cd0b80ca7da3099e43cc549d67526b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 23 20:35:56 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 26 08:38:34 2012 -0700"
      },
      "message": "Nomenclature improvements.\n\nChange-Id: I809ab04b6ee74bb8141791e1f3f5d7e3f4efb61c\n"
    },
    {
      "commit": "441d9126a8682da29f0ea3fa0040b7e0c63025be",
      "tree": "9d856632c8d19394d5f0561b1ce3199c8ecba099",
      "parents": [
        "a035e838be7df28c354b75cfa30296c4d0da0b8b"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Mar 21 17:29:10 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Fri Mar 23 17:15:47 2012 -0700"
      },
      "message": "Class getField/Method returns NULL if type/args are unresolved.\n\nThese changes check that a field\u0027s type is resolved before returning it\nthrough getDeclaredField, and that a method\u0027s return type and argument\ntypes are resolved before returning it through getDeclaredMethods. This\nfixes test failures in libcore MissingClassesTest.\n\n(cherry picked from commit 1ae431a01516b6c91f031aff37c756b7e4f63dd1)\n\nChange-Id: I6bd5601a975e677be6438b1efcb1b1f1ecde900c\n"
    },
    {
      "commit": "2ed52c4419dd537c98cd7898bc8bdcf8826b8940",
      "tree": "e90598e39df514d8a86cbb160288b4fd563eb1c1",
      "parents": [
        "051c9fc1de07bbc265af38cf60f061394163c68f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 21 16:56:56 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 21 16:57:43 2012 -0700"
      },
      "message": "Stash the directly-implemented interfaces in Proxy so we can implement Class.getInterfaces.\n\nAlso extend test 044 to spot this (found by a libcore test).\n\nChange-Id: I50019db49c549f045d94173c3ed9ae81f05ef858\n"
    },
    {
      "commit": "1984651929744dd603fd082e23eacd877b9bc177",
      "tree": "ffa10973a88f0f2743f3fbfaf5e7e4235d5f262d",
      "parents": [
        "f3c01c530ab3a645bd5a980522df4d396dcbf228"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 24 11:42:47 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 27 16:08:56 2012 -0800"
      },
      "message": "Invoke static/direct dispatch change.\n\nThere was a subtle race in static/direct dispatch via the code and methods\ntable. This patch removes the table in preparation of architectures like\nx86 which will more aggressively sink loads.\n\nRemoves unused fields, code.. Brings back resolved methods table\nshort-cut and associated fast paths to use this (such as in Proxy). Adds\na resolution method that is used as the trampoline for static and direct\nmethods.\n\nAdd source file and line number to Throwable::Dump.\n\nMethodHelper knowledge of runtime methods.\n\nChange-Id: Ieae1b74c24072e6327a5bb2cad466f04e3c46c4d\n"
    },
    {
      "commit": "45651fde99f52546e71241bb0e8a10d16a9f216a",
      "tree": "c796792c4b07027cfef0b519c4acafa307136257",
      "parents": [
        "3e2e1a2380e7b2ce402640ea4f6a177c06bd19a2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 15:48:20 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 15:48:20 2012 -0800"
      },
      "message": "Fix various debugger method invocation bugs.\n\n(Also fix DexFile to admit that string lengths are always non-negative.)\n\nChange-Id: I2d01ef2411b5c7e594527790daf3e0aaa3a1b67f\n"
    },
    {
      "commit": "7b0c5b4739e3d9df11caa883de01cc5f4ea30753",
      "tree": "b8754300b1de8f3787803aff764463cb1c2879de",
      "parents": [
        "283ed0d9db3084d0fee46d47cd73bf84bd0cfc16"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 16 15:29:07 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 16 16:05:30 2012 -0800"
      },
      "message": "Various dex index tweaks to improve verifier performance\n\nChange-Id: I9369443495b69fc8092f6a69118691c056db3188\n"
    },
    {
      "commit": "16f93671923979733cb46fc6f053c8f65754d5eb",
      "tree": "1bcb06e29786c5c93e0dc588b4ad6e8e94de0034",
      "parents": [
        "b305770f45e9cec66c3bdf792c4e7fa9cff5ec6e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 14 12:29:06 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 14 14:39:26 2012 -0800"
      },
      "message": "Remove dexCacheResolvedMethods, address Proxy issue\n\nChange-Id: Iab8c7edb954d241bd5a92260db07696b9559155f\n"
    },
    {
      "commit": "b5d6a4983732387dd9fe9f0024d19a766819755d",
      "tree": "c7945cf6ebf6ebe0438421758884abb7ad240046",
      "parents": [
        "42882d1ae5a297b037f560a6ec190be1a584579d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 14 04:00:51 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 14 04:00:51 2012 -0800"
      },
      "message": "Revert \"Remove dexCacheResolvedMethods from Method/Constructor\"\n\nThis reverts commit 42882d1ae5a297b037f560a6ec190be1a584579d"
    },
    {
      "commit": "42882d1ae5a297b037f560a6ec190be1a584579d",
      "tree": "b702812d71828f757872b5cd1b915f2baf74a251",
      "parents": [
        "60f83e3274739317d8c3a1b069cebc6bf1e40f29"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 13 19:18:37 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 13 22:00:50 2012 -0800"
      },
      "message": "Remove dexCacheResolvedMethods from Method/Constructor\n\nThis short-cut is no longer directly accessed via compiled code.\n\nAlso fix compiler_test which requires isFinalizable to be explicitly\ncompiled when Object.\u003cinit\u003e is handled in managed code.\n\nChange-Id: I028cf0fc8fa25a44df4adacc7c686ade413a5a42\n"
    },
    {
      "commit": "ff17f1fd3ff32f93e45588eb2b158832d73f9afa",
      "tree": "deab04f6a2ad7f1dbaf0e6be266512d663e3dd91",
      "parents": [
        "a7679b67ca945194fa2442015e606cd250f0de2b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 24 18:12:29 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 24 18:12:29 2012 -0800"
      },
      "message": "Remove various bits of lint.\n\nChange-Id: I5f8f61766d2add7fd7ff40d463ea03cb20515988\n"
    },
    {
      "commit": "12c51e3e5a8b5655351539618f1cf2331f52d1ab",
      "tree": "c43410d90d36fb5eb2f2e6b956ab28000792626e",
      "parents": [
        "b4807ec95e8ba663b47c13da3e065874b1b586e6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 17 20:25:05 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 17 20:25:05 2012 -0800"
      },
      "message": "We use NULL to mean \"unknown source\", but you can\u0027t pass NULL to C string functions.\n\nFound by the stability monkeys.\n\nBug: 5880980\nChange-Id: I2775024a5038d3716f4e7c6beac02c3f5e0a3f3a\n"
    },
    {
      "commit": "672f520b125639c090cc38c9ae7231e0dfbd31dd",
      "tree": "85b433a9ff0be58a118711b6a9be0e7c0b5aa5e9",
      "parents": [
        "b52b01ac70ccc5a56e108d81451beda0e1d320a0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 12 18:06:40 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 12 18:06:40 2012 -0800"
      },
      "message": "Fix race in double verifying super class\n\nChange-Id: I75089d0be8ad13b22300dd59bcc88da61d349e0d\n"
    },
    {
      "commit": "a68a1cb0769d618331d65a94d1a9cde68fcbb5ea",
      "tree": "3f95b3d6926e4c29db859eef77790032ef9da898",
      "parents": [
        "413f9e040589f6ab67ebae35951c5723f0130f1f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jan 10 10:34:36 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jan 10 10:34:36 2012 -0800"
      },
      "message": "Streamline ClassHelper::GetDescriptor\n\nThis hot method has a lot of corner cases, try to aid the compiler in\noptimizing for the common case.\n\nChange-Id: I78df837eddd3b2475bdc1afdbbd7395bce8c44f7\n"
    },
    {
      "commit": "c2b4447ae9c0c1e77595620acac6508999df6698",
      "tree": "20192c2044d004b364a7f8aa6c9cd3a272e3e706",
      "parents": [
        "fbef9462e3bf2301dd5b337d351b6b70f7e31bc8"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Dec 14 21:17:17 2011 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Dec 15 06:45:50 2011 -0800"
      },
      "message": "Fix for test 044-proxy\n\nProxy implementation was incomplete following meta-data refactoring,\ncomplete this change.\n\nChange-Id: Ic0567bdef373dbae17031a30aabc779027173229\n"
    },
    {
      "commit": "91250e0c3fb0ad758b9b97042a3fa86d5ae76763",
      "tree": "bb6f32bfc5178a9d56445b79ae0fd6763162e0a8",
      "parents": [
        "42298fab70318f39e53c0595e9fc570548dc253c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 22:30:35 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 22:30:35 2011 -0800"
      },
      "message": "Knock 0.5s off the Calculator startup time.\n\nDown to 2.5s on mysid. We now only mess around with std::strings when we need\nto synthesize a descriptor. If we can just hand out a const char* straight from\nthe dex file -- which most of the time we can -- we now do.\n\nChange-Id: Iddec7062d8bd578bd25f671eb4d597e9ed064d65\n"
    },
    {
      "commit": "955724179c6c739524f610023287f56b24dc31de",
      "tree": "64f751693e72173ae0d044d8c54989b01f1195af",
      "parents": [
        "b87f73ea7524f6eb9da6da1af931a3d3fbb833ff"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 18:14:20 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 18:14:20 2011 -0800"
      },
      "message": "Don\u0027t default-construct std::strings and then assign them.\n\nChange-Id: I8c994d1e6a8d2ebe52eaa4f0132e0deb2ecfa5f3\n"
    },
    {
      "commit": "6f1dfe415019de95f0305de66b3afb40005fe382",
      "tree": "93a39a7cd459a25bfe6b30fbf105518a549dc593",
      "parents": [
        "c2a2f295a15492ebbdb2613df97f9f7d331310e3"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Dec 08 17:28:34 2011 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Dec 08 17:52:16 2011 -0800"
      },
      "message": "Ensure referenced catch block exceptions are in the image.\n\nThis addresses Bug: 5732744.\n\nChange-Id: Ia9319b821f94bb27a11358f11b5473bb405277bb\n"
    },
    {
      "commit": "6d4d9fcb4f01e287ee29e81cd1c941ee5d11d379",
      "tree": "4c715bef86a3c5a47f9cea43c4a092cf4766ed4b",
      "parents": [
        "86b0010c79ef95b5333cd540b7d3af34a9f1a643"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 30 16:24:48 2011 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Dec 06 14:02:09 2011 -0800"
      },
      "message": "Reduce meta-data object sizes, introduce meta-data helper classes.\n\nChange-Id: Id14ad218f1c74c659701352fdf1a45bf6444daa3\n"
    }
  ]
}
