)]}'
{
  "log": [
    {
      "commit": "6fac447555dc94a935b78198479cce645c837b89",
      "tree": "bcf1449999084b1e1dec3dac287f6f3670d7eda0",
      "parents": [
        "7f0ff7e7fff82566bca5f9353eaa2c4f81f0671a"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 25 17:01:10 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 26 16:38:22 2014 -0800"
      },
      "message": "Make allocations report usable size.\n\nWork-in-progress to allow arrays to fill usable size. Bug: 13028925.\nUse C++11\u0027s override keyword on GCC \u003e\u003d 2.7 to ensure that we override GC and\nallocator methods.\nMove initial mirror::Class set up into a Functor so that all allocated objects\nhave non-zero sizes. Use this property to assert that all objects are never\nlarger than their usable size.\nOther bits of GC related clean-up, missing initialization, missing use of\nconst, hot methods in .cc files, \"unimplemented\" functions that fail at\nruntime in header files, reducing header file includes, move valgrind\u0027s space\ninto its own files, reduce number of array allocation routines.\n\nChange-Id: Id5760041a2d7f94dcaf17ec760f6095ec75dadaa\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": "d2fe10a3a34af171bf1631219cd2d6ff6b7778b5",
      "tree": "b6b7eb8eba23a5c2723518da99c03bf47b97f58a",
      "parents": [
        "5a3f55ad9519e87c0d3bbddaf3d8a186a887a79b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jan 15 10:20:56 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Feb 17 11:32:15 2014 +0100"
      },
      "message": "Remove blacklist\n\nRemoves the class initialization blacklist and use transaction to detect and\nrevert class initialization attempting to invoke native method. This only\nconcerns class initialization happening at compilation time when generating an\nimage (like boot.art for the system).\n\nIn transactional mode, we log every object\u0027s field assignment and array update.\nTherefore we\u0027re able to abort a transaction to restore values of fields and\narray as they were before the transaction starts. We also log changes to the\nintern string table so we can restore its state prior to transaction start.\n\nSince transactional mode only happens at compilation time, we don\u0027t need to log\nall these changes at runtime. In order to reduce the overhead of testing if\ntransactional mode is on/off, we templatize interfaces of mirror::Object and\nmirror::Array, respectively responsible for setting a field and setting an\narray element.\n\nFor various reasons, we skip some specific fields from transaction:\n- Object\u0027s class and array\u0027s length must remain unchanged so garbage collector\ncan compute object\u0027s size.\n- Immutable fields only set during class loading: list of fields, method,\ndex caches, vtables, ... as all classes have been loaded and verified before a\ntransaction occurs.\n- Object\u0027s monitor for performance reason.\n\nBefore generating the image, we browse the heap to collect objects that need to\nbe written into it. Since the heap may still holds references to unreachable\nobjects due to aborted transactions, we trigger one collection at the end of\nthe class preinitialization phase.\n\nSince the transaction is held by the runtime and all compilation threads share\nthe same runtime, we need to ensure only one compilation thread has exclusive\naccess to the runtime. To workaround this issue, we force class initialization\nphase to run with only one thread. Note this is only done when generating image\nso application compilation is not impacted. This issue will be addressed in a\nseparate CL.\n\nBug: 9676614\nChange-Id: I221910a9183a5ba6c2b99a277f5a5a68bc69b5f9\n"
    },
    {
      "commit": "5bb99037bef70784ae4630c2e4b81688d2a18621",
      "tree": "7c01146719c9bd445f983d470980206952d8719b",
      "parents": [
        "9c7f35435b51cdeae8665aabb8e63392105db787"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Feb 08 16:20:58 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Feb 08 16:26:12 2014 -0800"
      },
      "message": "Fix CreateMultiArray to be compaction safe.\n\nIt used to be compaction safe before moving classes was enabled.\nAdded missing SIRTs.\n\nChange-Id: I92963ed71fa6d2a20d16ec0e400b8fa0e41ac196\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": "cbb2d20bea2861f244da2e2318d8c088300a3710",
      "tree": "9735d496716cf165ea0ee2d7e2f62d723ffc7734",
      "parents": [
        "d31fb9718a6180304cd951619dc36be8e090a641"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 14 17:45:16 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 20 11:14:11 2013 -0800"
      },
      "message": "Refactor allocation entrypoints.\n\nAdds support for switching entrypoints during runtime. Enables\naddition of new allocators with out requiring significant copy\npaste. Slight speedup on ritzperf probably due to more inlining.\n\nTODO: Ensuring that the entire allocation path is inlined so\nthat the switch statement in the allocation code is optimized\nout.\n\nRosalloc measurements:\n4583\n4453\n4439\n4434\n4751\n\nAfter change:\n4184\n4287\n4131\n4335\n4097\n\nChange-Id: I1352a3cbcdf6dae93921582726324d91312df5c9\n"
    },
    {
      "commit": "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": "967a0adf8b93a23d2a8fef82e06bd913db94ac19",
      "tree": "35b7fbf6eb1899736213e57e11c85d16c1b4853e",
      "parents": [
        "af3994db1b42929666b6a50c3c4b237a25c99951"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Sep 10 16:24:21 2013 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Sep 11 15:38:23 2013 -0700"
      },
      "message": "More allocation code optimizations.\n\n- Inline Class::AllocObject() and Array::Alloc().\n- Inline some short Mutex functions and add LIKELY/UNLIKELY to some\n  Mutex functions.\n- This change improves the Ritz MemAllocTest by ~6% on Nexus 4 and\n  ~10% on host.\n\nBug: 9986565\nChange-Id: I1606c74ddb21676cbc1de1a40e9b076fc23eaea4\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": "9897be996580db9de86f880f9ad9d36c66057a52",
      "tree": "e45bfd56f1d1aa640682e2ac8c5b83d0a5941a79",
      "parents": [
        "48fcf64a2d8ecc993e64d7b349b10d3b066724ae"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jun 27 18:24:46 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jun 27 18:24:46 2013 +0200"
      },
      "message": "Make Array\u0027s throw routines void.\n\nThe \"bool\" return type of Array::ThrowArrayIndexOutOfBoundsException and\nArray::ThrowArrayStoreException is useless. Make them void.\n\nNote on ARM, this removes a \"cmp\" instruction in AGET/APUT instructions.\n\nChange-Id: I843e895aa4622ca56aaa3f2eb2d5b5100a92c1ae\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": "62d6c772205b8859f0ebf7ad105402ec4c3e2e01",
      "tree": "e2f2ba6d71ed5a39c9f6909e3f7c08e998053315",
      "parents": [
        "c9b17c7ee96cd04fac9048aab624ed554fe260bf"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 27 08:32:07 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Apr 08 14:24:13 2013 -0700"
      },
      "message": "Interpreter entries and instrumentation as a listener.\n\nMake the instrumentation responsible for whether we want method entry/exit\nstubs, and allow it to use interpreter entry stubs when instruction by\ninstruction instrumentation is required. Improve deoptimization so more JDWP\ntest cases are passing.\n\nRefactor exception debug posting, in particular improve reporting in the\ninterpreter. Improve class linker exception throwing so that broken dex files\nare more likely to be reported. Fixes the performance issue Bug: 8410519.\n\nFix some error reporting lock level errors for the large object space. Make\nfast object verification faster.\n\nAdd some debug mode robustness to finding dex PCs in GC maps.\n\nAdd printf attributes to JniAbortF and fix errors.\n\nExpand run-test 044 to test return behaviors and fix issues with not throwing\nappropriate exceptions for proxies.\n\nEnsure causes are reported with a class linker NoClassDefFoundError and JNI\nNoSuchFieldError.\n\nRemove unused debugMe and updateDebuggerFromCode.\n\nThere\u0027s a minor sizing tweak to the arg array builder, and an extra reference\narray check in the interpreter.\n\nSome clean-up of trace code.\n\nFix reg type cache destructor if it is called after the reg type cache is\nshutdown (as is the case in oatdump).\n\nChange-Id: I6519c7b35df77f978d011999354c864f4918e8ce\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": "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"
    }
  ]
}
