)]}'
{
  "log": [
    {
      "commit": "e401d146407d61eeb99f8d6176b2ac13c4df1e33",
      "tree": "17927f9bfe7d2041b5942c89832d55f9dedb24c5",
      "parents": [
        "2006b7b9b8e32722bd0d640c62549d8a0ac624b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 13:56:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 29 18:45:49 2015 -0700"
      },
      "message": "Move mirror::ArtMethod to native\n\nOptimizing + quick tests are passing, devices boot.\n\nTODO: Test and fix bugs in mips64.\n\nSaves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.\nSome of the savings are from removal of virtual methods and direct\nmethods object arrays.\n\nBug: 19264997\nChange-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d\n"
    },
    {
      "commit": "80afd02024d20e60b197d3adfbb43cc303cf29e0",
      "tree": "ef054c7b4f2a739f7cf063e0bc4c501c2c7e41b5",
      "parents": [
        "559b178e34c5d92e7932f92e5d8a981ac334606f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 19 18:08:00 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 15:59:02 2015 +0100"
      },
      "message": "ART: Clean up arm64 kNumberOfXRegisters usage.\n\nAvoid undefined behavior for arm64 stemming from 1u \u003c\u003c 32 in\nloops with upper bound kNumberOfXRegisters.\n\nCreate iterators for enumerating bits in an integer either\nfrom high to low or from low to high and use them for\n\u003carch\u003eContext::FillCalleeSaves() on all architectures.\n\nRefactor runtime/utils.{h,cc} by moving all bit-fiddling\nfunctions to runtime/base/bit_utils.{h,cc} (together with\nthe new bit iterators) and all time-related functions to\nruntime/base/time_utils.{h,cc}. Improve test coverage and\nfix some corner cases for the bit-fiddling functions.\n\nBug: 13925192\nChange-Id: I704884dab15b41ecf7a1c47d397ab1c3fc7ee0f7\n"
    },
    {
      "commit": "50030ef998be09789da4a9a56738362852068f12",
      "tree": "02df1bd0954f9b970434d1363466b0cfe182bc12",
      "parents": [
        "6727a48193db2a0cf01af971cccffe1a6518c247"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 08 14:19:26 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 08 15:09:17 2015 -0700"
      },
      "message": "Check IsReferenceVReg during deopt\n\nRequired since the quick GC maps may not agree with the verifier\nones. Without this check we may copy stale object references into\nthe shadow frame.\n\n(cherry picked from commit f00baf56ef647684888a407dbb6adadd704a2039)\n\nBug: 20736048\nChange-Id: I7783c8a8ee45cf601b08b4c38f1dec7f7d11380c\n"
    },
    {
      "commit": "0d22184ec9e5b1e958c031ac92c7f053de3a13a2",
      "tree": "4055eda9986916dc86b39d023082a57e60c804f4",
      "parents": [
        "97c96f5aab22f75dd54089bdc194588a4b5a2e8d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 27 08:53:46 2015 +0000"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Apr 27 20:06:50 2015 -0400"
      },
      "message": "Revert \"Revert \"[optimizing] Replace FP divide by power of 2\"\"\n\nThis reverts commit 067cae2c86627d2edcf01b918ee601774bc76aeb.\n\nChange-Id: Iaaa8772500ea7d3dce6ae0829dc0dc3bbc9c14ca\n"
    },
    {
      "commit": "2cebb24bfc3247d3e9be138a3350106737455918",
      "tree": "d04d27d21b3c7733d784e303f01f873bb99e7770",
      "parents": [
        "1f02f1a7b3073b8fef07770a67fbf94afad317f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 21 16:50:40 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 12:44:27 2015 -0700"
      },
      "message": "Replace NULL with nullptr\n\nAlso fixed some lines that were too long, and a few other minor\ndetails.\n\nChange-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb\n"
    },
    {
      "commit": "40da286d3207d88ed8ff3f5caac4873874603428",
      "tree": "3f9720425b2a024a5a54a0a71447dcea107229a8",
      "parents": [
        "6508158f8388847f4cc3693e2cc1dbee6c2c7d18"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Feb 27 12:49:04 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Apr 15 20:45:35 2015 -0700"
      },
      "message": "ART: Streaming trace mode\n\nAdd a streaming mode for tracing. Streaming uses a buffer of 16KB\nand writes to the output when that buffer gets full. Streaming mode\ncan be enabled with -Xmethod-trace-stream and is currently not\nexposed otherwise.\n\nAdd a python script that can parse the streaming format, which\nsimply contains strings for newly encountered threads and methods\ninline, and create output that can be used with traceview.\n\nAdd Trace::Pause and Trace::Abort, which can pause and abort tracing.\nAbort is different from Stop in that it does not write the data.\n\nAdd code to the zygote hooks JNI implementation that pauses tracing\nbefore the fork, making sure that a child cannot clobber the parent\u0027s\ndata.\n\nAdd code to the zygote hooks JNI implementation that aborts old\ntracing and starts new tracing in the child after the fork. Currently\nbase the output on the pid. This will not work on an unmodified\ndevice, as the profiles directory is not generally writable, but\nwe do not have enough information at that point. Consider a scheme\nthat restarts tracing later.\n\nChange-Id: I93c7bf87e35af582bdfdd3ecc7c52454514220dd\n"
    },
    {
      "commit": "c785344b87221f5e4e6473e5b762e4e61fe65dcf",
      "tree": "cd32ad2c2604596a18926f04d4c313dab255ecfd",
      "parents": [
        "a29d93b380c9aeb8270e281aefbdd0c77a430d43"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 27 14:35:38 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 10 12:57:27 2015 -0700"
      },
      "message": "Move ArtField to native\n\nAdd linear alloc. Moved ArtField to be native object. Changed image\nwriter to put ArtFields after the mirror section.\n\nSavings:\n2MB on low ram devices\n4MB on normal devices\n\nTotal PSS measurements before (normal N5, 95s after shell start):\nImage size: 7729152 bytes\n23112 kB: .NonMoving\n23212 kB: .NonMoving\n22868 kB: .NonMoving\n23072 kB: .NonMoving\n22836 kB: .NonMoving\n19618 kB: .Zygote\n19850 kB: .Zygote\n19623 kB: .Zygote\n19924 kB: .Zygote\n19612 kB: .Zygote\nAvg: 42745.4 kB\n\nAfter:\nImage size: 7462912 bytes\n17440 kB: .NonMoving\n16776 kB: .NonMoving\n16804 kB: .NonMoving\n17812 kB: .NonMoving\n16820 kB: .NonMoving\n18788 kB: .Zygote\n18856 kB: .Zygote\n19064 kB: .Zygote\n18841 kB: .Zygote\n18629 kB: .Zygote\n3499 kB: .LinearAlloc\n3408 kB: .LinearAlloc\n3424 kB: .LinearAlloc\n3600 kB: .LinearAlloc\n3436 kB: .LinearAlloc\nAvg: 39439.4 kB\n\nNo reflection performance changes.\n\nBug: 19264997\nBug: 17643507\n\nChange-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c\n"
    },
    {
      "commit": "f6468109a49aff6e4a1d28787de625bfb214a761",
      "tree": "a662906fca20ace8fb42ebe4872822d00015596c",
      "parents": [
        "03910065cd025ecb07781b85c2240be69c202d75"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 27 10:31:38 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Mar 27 11:02:20 2015 +0000"
      },
      "message": "ART: Fix IsInt when N\u003d\u003d32, add tests\n\nImplicit type conversion caused IsInt to always return true for N\u003d\u003d32\non 32-bit platforms. This patch templetizes the function to avoid\nthe conversion and adds tests of this and similar functions.\n\nChange-Id: Ie526b68b7c3e7cb7b658253d51840794224785fe\n"
    },
    {
      "commit": "74fc513982fa74b1120f7b8546fc825fc406e1b1",
      "tree": "bb6d78e147eb0eb6f4134c2ee1c7aa24b51f7644",
      "parents": [
        "5eae0b6112aef6b1bc3a24427e80f1ef96e513dc"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 26 15:11:45 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 26 15:11:45 2015 +0000"
      },
      "message": "ART: Define IsInt when N\u003d\u003dkBitsPerIntPtrT\n\n\u0027utils.h\u0027 contains two implementations of the IsInt query, one of\nwhich is defined for bit sizes \u003c\u003d kBitsPerIntPtrT, while the other\nonly for sizes \u003c kBitsPerIntPtrT. This patch unifies the behaviour\nand fixes the breakage caused by it.\n\nChange-Id: I4f5589b1a36b6c24926e50574fbca528c33d701f\n"
    },
    {
      "commit": "da4d79bc9a4aeb9da7c6259ce4c9c1c3bf545eb8",
      "tree": "151dd61c4b6a8fd512ea4c2c862af28b02f4ed9c",
      "parents": [
        "af87659f462ac650009fce295097cae3dabce171"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 24 14:36:11 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 24 16:02:21 2015 +0000"
      },
      "message": "Unify ART\u0027s various implementations of bit_cast.\n\nART had several implementations of art::bit_cast:\n\n1. one in runtime/base/casts.h, declared as:\n\n   template \u003cclass Dest, class Source\u003e\n   inline Dest bit_cast(const Source\u0026 source);\n\n2. another one in runtime/utils.h, declared as:\n\n   template\u003ctypename U, typename V\u003e\n   static inline V bit_cast(U in);\n\n3. and a third local version, in runtime/memory_region.h,\n   similar to the previous one:\n\n   template\u003ctypename Source, typename Destination\u003e\n   static Destination MemoryRegion::local_bit_cast(Source in);\n\nThis CL removes versions 2. and 3. and changes their callers\nto use 1. instead.  That version was chosen over the others\nas:\n- it was the oldest one in the code base; and\n- its syntax was closer to the standard C++ cast operators,\n  as it supports the following use:\n\n    bit_cast\u003cDestination\u003e(source)\n\n  since `Source\u0027 can be deduced from `source\u0027.\n\nChange-Id: I7334fd5d55bf0b8a0c52cb33cfbae6894ff83633\n"
    },
    {
      "commit": "6eb987dd8afd001898f262263203a1a3ff3fcf83",
      "tree": "0115f8aace42392f6d0112f75f7bcd9a0a090b9e",
      "parents": [
        "c685bce4e6cfec075cb5b468d06b2fcdeeda2005"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 12 17:26:05 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 12 17:26:05 2015 -0700"
      },
      "message": "Fix copy/paste documentation error.\n\nChange-Id: I153a8fdb3644c7178895ce0cc6c1c3f6ce3c6876\n"
    },
    {
      "commit": "97d30aca68af2aa4f114a01d7a7d73e4bf009fe0",
      "tree": "e441187dfab14ffab41aff6576df6aaa14ce8b1c",
      "parents": [
        "3848c4fbc189287bca1298d45d07e21ec90c7c82",
        "b2fd7bca70b580921eebf7c45769c39d2dfd8a5a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Mar 12 17:00:14 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 12 17:00:15 2015 +0000"
      },
      "message": "Merge \"Opt compiler: Basic simplification for arithmetic operations.\""
    },
    {
      "commit": "a2d8ec6876325e89e5d82f5dbeca59f96ced3ec1",
      "tree": "65bf174b669ff3cd9694dc5a1124fb9f2225ade1",
      "parents": [
        "39d9fe2eb3552a002c53ed41701c6faffe3cd75a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Mar 12 15:25:29 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Mar 12 15:25:29 2015 +0000"
      },
      "message": "Compress the Dex register maps built by the optimizing compiler.\n\n- Replace the current list-based (fixed-size) Dex register\n  encoding in stack maps emitted by the optimizing compiler\n  with another list-based variable-size Dex register\n  encoding compressing short locations on 1 byte (3 bits for\n  the location kind, 5 bits for the value); other (large)\n  values remain encoded on 5 bytes.\n- In addition, use slot offsets instead of byte offsets to\n  encode the location of Dex registers placed in stack\n  slots at small offsets, as it enables more values to use\n  the short (1-byte wide) encoding instead of the large\n  (5-byte wide) one.\n- Rename art::DexRegisterMap::LocationKind as\n  art::DexRegisterLocation::Kind, turn it into a\n  strongly-typed enum based on a uint8_t, and extend it to\n  support new kinds (kInStackLargeOffset and\n  kConstantLargeValue).\n- Move art::DexRegisterEntry from\n  compiler/optimizing/stack_map_stream.h to\n  runtime/stack_map.h and rename it as\n  art::DexRegisterLocation.\n- Adjust art::StackMapStream,\n  art::CodeGenerator::RecordPcInfo,\n  art::CheckReferenceMapVisitor::CheckOptimizedMethod,\n  art::StackVisitor::GetVRegFromOptimizedCode, and\n  art::StackVisitor::SetVRegFromOptimizedCode.\n- Implement unaligned memory accesses in art::MemoryRegion.\n- Use them to manipulate data in Dex register maps.\n- Adjust oatdump to support the new Dex register encoding.\n- Update compiler/optimizing/stack_map_test.cc.\n\nChange-Id: Icefaa2e2b36b3c80bb1b882fe7ea2f77ba85c505\n"
    },
    {
      "commit": "b2fd7bca70b580921eebf7c45769c39d2dfd8a5a",
      "tree": "c5dae29519df73f889ba14495eb79d545cd7d6e5",
      "parents": [
        "356286f989941ac495417195e4129aaceaf36a83"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Wed Mar 11 16:48:16 2015 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Wed Mar 11 16:48:16 2015 +0000"
      },
      "message": "Opt compiler: Basic simplification for arithmetic operations.\n\nThe optimisations in this patch do not look further than the\ninputs of each operation.\n\nChange-Id: Iddd0ab6b360b9e7bb042db22086d51a31be85530\n"
    },
    {
      "commit": "66d874d96d5699bb090c59f47a5a528956ca053e",
      "tree": "d59bf83a08fead7d9823230831bea63c9e43a62c",
      "parents": [
        "2cfdabd2bb4833d7092819d27ef08a9e1cdffead"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jan 15 09:37:19 2015 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Mar 09 14:46:23 2015 -0700"
      },
      "message": "Create OatFileAssistant class for assisting with oat files.\n\nThe oat file assistant is used for determining whether dex2oat or\npatchoat is needed, for running dex2oat or patchoat as needed to make\nan oat file up to date, and to load dex files associated with a given\ndex location.\n\nThe introduction of the OatFileAssistant class is meant to clean up and\nconsolidate code related to the management of oat files that was\nduplicated and spread across dalvik_system_DexFile.cc and\nclass_linker.cc.\n\nBug: 11301553\nChange-Id: I0c16027b9bae4570c2c50faa9c14f581c0cbafb8\n"
    },
    {
      "commit": "965fd02721746d4164bc40719cd53eefab37cfb3",
      "tree": "f1140d01dfc9547757fbf5e5b97a9c780a7d7503",
      "parents": [
        "01b7c431ed85e0eae4554f6fc0f79a78bc82f31f"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Feb 26 11:08:57 2015 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Feb 26 11:08:57 2015 -0800"
      },
      "message": "Don\u0027t require three-character extensions for dex locations.\n\nBug: 19437875\nChange-Id: Ib62b4c691b04f27c5d499affd5a7fd4d9f0c64f9\n"
    },
    {
      "commit": "a6dfdae1cffc78f9791348b2e1dc8f4c6c3f7128",
      "tree": "2b07c1cc94212963ec38a2c0a784a26fe1522194",
      "parents": [
        "96ac49a260223dc00291116daa63d7489c52bb0f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 24 15:50:19 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 24 22:30:47 2015 -0800"
      },
      "message": "ART: Print maps directly to log\n\nDo not read proc maps into a string before printing them later back\nto the log. In low-memory situations this can cause a bad_alloc.\n\nExternal bug: http://b.android.com/153990\nBug: 19494774\n\nChange-Id: Ie63d8788afe8c9da65b30b2f89c50d3dbb820755\n"
    },
    {
      "commit": "80b96d1a76790527f72a660ac03d9c215eed17ce",
      "tree": "8af6fb3840c60c65887cd5de64d987058bb8986e",
      "parents": [
        "39109a06015c91188232e59fa9e60e0915d24cd7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 19 15:50:28 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 19 18:02:20 2015 +0000"
      },
      "message": "Replace a few std::vector with ArenaVector in Mir2Lir.\n\nChange-Id: I7867d60afc60f57cdbbfd312f02883854d65c805\n"
    },
    {
      "commit": "ab1eb0d1d047e3478ebb891e5259d2f1d1dd78bd",
      "tree": "a2d211ec81294adab2981d0179c8f04be3e8c8c4",
      "parents": [
        "6e27f82193a8f54cd8ecdc8fb2c4c1adadafbaf4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Feb 13 19:23:55 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Feb 18 16:50:22 2015 -0800"
      },
      "message": "ART: Templatize IsInt \u0026 IsUint\n\nEnsure that things are used correctly.\n\nChange-Id: I76f082b32dcee28bbfb4c519daa401ac595873b3\n"
    },
    {
      "commit": "aaebaa0121be3b9d9f13630585304482cbcaeb4b",
      "tree": "0f47257e497fdf920c8d703d2d00adab53934a76",
      "parents": [
        "babecc483276b46d84cb83d4f01e577228827305"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Jan 26 10:55:53 2015 -0800"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Feb 04 13:29:19 2015 -0800"
      },
      "message": "art: Refactor RuntimeOptions/ParsedOptions\n\nRefactor the RuntimeOptions to be a\ntype-safe map (VariantMap, see runtime_options.h) and the ParsedOptions\nto delegate the parsing to CmdlineParser (see cmdline/cmdline_parser.h).\n\nThis is the start of a command line parsing refactor, and may include\nmore in the future (dex2oat, patchoat, etc).\n\nFor more details of the command line parsing generator usage see cmdline/README.md\n\nChange-Id: Ic67c6bca5e1f33bf2ec60e2e3ff8c366bab91563\n"
    },
    {
      "commit": "628a61ac52a8a314e74ab445397add60b4e72a5b",
      "tree": "df78aa48e31e58669c6ae63ace7ba6bb532ec65d",
      "parents": [
        "4270e74152d8a7cd979ab5a92fe2a8f84adb8a42"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 07 22:08:35 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 08 09:35:31 2015 -0800"
      },
      "message": "ART: Pass ucontext to Backtrace in Stack Dump\n\nIn case of an unexpected signal on the host we dump the thread stack\nourselves. We have to pass the context given to the signal handler,\nas the signal handler is run on an alternate stack. Otherwise\nlibbacktrace can\u0027t dump the actual faulty part.\n\nBug: 18933933\nChange-Id: Id2710d2fd44b7c3b3335973a9288979a5793638b\n"
    },
    {
      "commit": "5567c11b9157eec110c0631aa2bff5836631e868",
      "tree": "6385002190e857aa2cedd813f461bb6b038fe4c5",
      "parents": [
        "27478e627e08ab42c43d5d934da9ea336ccaf628"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Dec 02 18:31:31 2014 -0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Dec 04 10:20:12 2014 -0800"
      },
      "message": "Make Barrier robust against spurious wakeups\n\nFix Barrier implementation so that Wait cannot return prematurely\ndue to a spurious condition variable wakeup or interrupted futex call.\n\nDocument the resulting semantics of barrier.h, which are a bit surprising,\nbut appear to be exactly what current clients need.\n\nFix the test so that it actually passes with the fixed barrier.h,\nand no longer tests for properties that can\u0027t be correctly satisfied.\n\nImprove comment for InitTimeSpec, which we almost used.\n\nBug:18509123\n\nChange-Id: I0b25f33bcd22322ba04e3951cd484843788c2bf5\n"
    },
    {
      "commit": "f5b4c50f52d1bde054deee33a8ef6fa18a0eff33",
      "tree": "52b7cedb38af4f428b11e79da0f7318dd02ebfb6",
      "parents": [
        "bdfbf86afde269ee3b38a6c928618333ffac13cf"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Nov 14 15:01:59 2014 -0800"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Nov 20 14:47:57 2014 -0800"
      },
      "message": "dex2oat: Pack likely-dirty objects together when generating the boot image\n\nThis introduces a new algorithm into image writer which \"bins\" objects\nby how likely they are to be dirtied at runtime. Objects in the same bin\nare placed contiguously in memory (i.e. into the same page). We try to\ntune the bin selection based on how clean or how dirty the object will\nlikely be at runtime.\n\nAs-is, this saves about 150KB per-process (private-dirty pages) and 700KB in\nzygote (shared-dirty).\n\nThere is still about 800KB of objects that are clean but located in\ndirty pages, so with more analysis we can tune the bin selection and get\neven more memory savings.\n\n(cherry picked from commit 3f735bd4f9d09a0f9b2b01321e4c6917879dcae6)\n\nBug: 17611661\nChange-Id: Ia1455e4c56ffd0a36ae2a723d35b7e06502980f7\n"
    },
    {
      "commit": "0e57decfd5e56f12f42c9663f8e6147237b86039",
      "tree": "122892c8f2c1290fe7b771cd9485d59a1c7351fa",
      "parents": [
        "963ab93759c051af21c07669f0d3f345e60b1da8",
        "851df20225593b10e698a760ac3cd5243620700b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 14 00:47:35 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 14 00:47:36 2014 +0000"
      },
      "message": "Merge \"ART: Multiview assembler_test, fix x86-64 assembler\""
    },
    {
      "commit": "851df20225593b10e698a760ac3cd5243620700b",
      "tree": "e4414bc2fbad4e73785e3ef336ab2278d85aa496",
      "parents": [
        "3225b83903329ba7745f6785127e09ff040492cf"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 12 14:05:46 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 13 16:31:59 2014 -0800"
      },
      "message": "ART: Multiview assembler_test, fix x86-64 assembler\n\nExpose \"secondary\" names for registers so it is possible to test\n32b views for 64b architectures.\n\nAdd floating-point register testing.\n\nRefactor assembler_test for better code reuse (and simpler adding\nof combination drivers).\n\nFix movss, movsd (MR instead of RM encoding), xchgl, xchgq,\nboth versions of EmitGenericShift.\n\nTighten imull(Reg,Imm), imulq(Reg,Imm), xchgl and xchgq encoding.\n\nClarify cv*** variants with a comment.\n\nAdd tests for movl, addl, imull, imuli, mull, subl, cmpqi, cmpl,\nxorq (regs), xorl, movss, movsd, addss, addsd, subss, subsd, mulss,\nmulsd, divss, divsd, cvtsi2ss, cvtsi2sd, cvtss2si, cvtss2sd, cvtsd2si,\ncvttss2si, cvttsd2si, cvtsd2ss, cvtdq2pd, comiss, comisd, sqrtss,\nsqrtsd, xorps, xorpd, fincstp, fsin, fcos, fptan, xchgl (disabled,\nsee code comment), xchgq, testl, andl, andq, orl, orq, shll, shrl,\nsarl, negq, negl, notq, notl, enter and leave, call, ret, and jmp,\nand make some older ones more exhaustive.\n\nFollow-up TODOs:\n1) Support memory (Address).\n2) Support tertiary and quaternary register views.\n\nBug: 18117217\nChange-Id: I1d583a3bec552e3cc7c315925e1e006f393ab687\n"
    },
    {
      "commit": "d582fa4ea62083a7598dded5b82dc2198b3daac7",
      "tree": "c76704c266ef4687eab425612ddf3fd24f93fe8d",
      "parents": [
        "f20076ff813b8012096ff31af236d59db3c0f4e1"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 05 23:46:43 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Nov 13 16:17:46 2014 -0800"
      },
      "message": "Instruction set features for ARM64, MIPS and X86.\n\nAlso, refactor how feature strings are handled so they are additive or\nsubtractive.\nMake MIPS have features for FPU 32-bit and MIPS v2. Use in the quick compiler\nrather than #ifdefs that wouldn\u0027t have worked in cross-compilation.\nAdd SIMD features for x86/x86-64 proposed in:\n  https://android-review.googlesource.com/#/c/112370/\n\nBug: 18056890\n\nChange-Id: Ic88ff84a714926bd277beb74a430c5c7d5ed7666\n"
    },
    {
      "commit": "575e78c41ece0dec969d31f46be563d4eb7ae43b",
      "tree": "16906df0ba0912a6cb01b3139ba7c60d5f9d09b7",
      "parents": [
        "2998e9cdc9f19c30c4944a4726ed9f147de79ebd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 23:41:03 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 23:41:03 2014 -0800"
      },
      "message": "ART: Replace COMPILE_ASSERT with static_assert (runtime)\n\nReplace all occurrences of COMPILE_ASSERT in the runtime tree.\n\nChange-Id: I01e420899c760094fb342cc6cb9e692dd670a0b2\n"
    },
    {
      "commit": "6a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866f",
      "tree": "9df58b57af13240a93a6da4eefcf03f70cce9ad9",
      "parents": [
        "c6e0955737e15f7c0c3575d4e13789b3411f4993"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 31 00:33:20 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 03 20:01:04 2014 -0800"
      },
      "message": "Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.\n\nFix associated errors about unused paramenters and implict sign conversions.\nFor sign conversion this was largely in the area of enums, so add ostream\noperators for the effected enums and fix tools/generate-operator-out.py.\nTidy arena allocation code and arena allocated data types, rather than fixing\nnew and delete operators.\nRemove dead code.\n\nChange-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b\n"
    },
    {
      "commit": "6f3dbbadf4ce66982eb3d400e0a74cb73eb034f3",
      "tree": "f7a20779e4d665f948c5fbcd26dac0071dafb8d4",
      "parents": [
        "2df6840f68dd18d7dd8dbf53f8b6181bbfdc4fc4"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 14 17:41:57 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 16 19:27:28 2014 -0700"
      },
      "message": "Make ART compile with GCC -O0 again.\n\nTidy up InstructionSetFeatures so that it has a type hierarchy dependent on\narchitecture.\nAdd to instruction_set_test to warn when InstructionSetFeatures don\u0027t agree\nwith ones from system properties, AT_HWCAP and /proc/cpuinfo.\nClean-up class linker entry point logic to not return entry points but to\ntest whether the passed code is the particular entrypoint. This works around\nimage trampolines that replicate entrypoints.\nBug: 17993736\n\nChange-Id: I5f4b49e88c3b02a79f9bee04f83395146ed7be23\n"
    },
    {
      "commit": "13735955f39b3b304c37d2b2840663c131262c18",
      "tree": "0a731ac42b8230f9929172fa3e3d8051874e2b18",
      "parents": [
        "25b18bbdaa36ff936eb44f228f0518d4223e9d52"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 12:43:28 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 16:05:58 2014 -0700"
      },
      "message": "stdint types all the way!\n\nChange-Id: I4e4ef3a2002fc59ebd9097087f150eaf3f2a7e08\n"
    },
    {
      "commit": "7e70b002c4552347ed1af8c002a0e13f08864f20",
      "tree": "79d5ee5444a5be70130d9a75dd51831c4b15687b",
      "parents": [
        "edc34c88b8f8abd04f9c4668787403608cf0b2d4"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 11:47:24 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 11:57:59 2014 -0700"
      },
      "message": "Header file clean up.\n\nRemove runtime.h from object.h.\nMove TypeStaticIf to its own header file to avoid bringing utils.h into\nallocator.h.\nMove Array::DataOffset into -inl.h as it now has a utils.h dependency.\nFix include issues arising from this.\n\nChange-Id: I4605b1aa4ff5f8dc15706a0132e15df03c7c8ba0\n"
    },
    {
      "commit": "c0d8229898c44c0f604f08a5df1de83ff56c18fd",
      "tree": "13b150e68e806204c547e04bc071246c06199c37",
      "parents": [
        "c70535b4f9f1ff3e3da451734bb7d9601012ccc1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 23 10:38:30 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 29 11:40:16 2014 -0700"
      },
      "message": "ART: Better IllegalAccessException message\n\nBug: 17618578\nBug: 17614623\nChange-Id: I0e3f15e676acd6ed5844fc86e136f75cc335372d\n"
    },
    {
      "commit": "3c13a794845e0cf7887e33b2ec20de7e6ba85f8f",
      "tree": "ab9a9a426a371de0c32e48a85fdda44a321a06a0",
      "parents": [
        "5cdd0734d2f79eedc530f5f1e876cd2110e29c86"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 18 20:56:04 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 18 23:43:07 2014 -0700"
      },
      "message": "ART: Only allow the zygote to create the global boot image\n\nDo not allow arbitrary processes, even when root, to write the\nboot image in /data/dalvik-cache.\n\nBug: 17478752, 17510489, 17439961\nChange-Id: Iba2b74be6d0752f4221f4ff5ee295b45a34cb2e1\n(cherry picked from commit 33c36d4f22ab6a5e61eb47b654deaf647c34e49c)\n"
    },
    {
      "commit": "aa4497db59f1eeec954f2ba5da6d458fcdf9b3a4",
      "tree": "1efe5c6c5fe93ae73b6ad02db1a4ac368c71c00e",
      "parents": [
        "6724a9531c92368491dd17937d0087f73a7c0642"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 05 14:01:17 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 10 16:02:14 2014 +0100"
      },
      "message": "Improve dex location canonicalization-related performance.\n\nEagerly add canonical dex file locations to the OatFile\u0027s\nprimary lookup map in Setup(). This moves the boot.oat work\nfrom every app startup to the zygote initialization. Since\nwe always ended up initializing the canonical location map\nanyway due to the way that we\u0027re loading dex files, the lazy\ninitialization didn\u0027t save anything.\n\nClean up dex file name canonicalization to make sure we\nfree() the memory returned by realpath() rather than using\nstd::unique_ptr\u003c\u003e with the default deleter.\n\nAvoid some unnecessary duplicate OatDexFile lookups.\n\nBug: 16828525\nBug: 17346103\nChange-Id: Id8fbc8992f62996138eb2006a0046c6529747c09\n"
    },
    {
      "commit": "68b56858367e29461ae290fd797443a1ef6d8005",
      "tree": "c086a68bcbbb50d7c3b829bcc7d4231ff815db4a",
      "parents": [
        "7c7686e62d262f1823876cebb3700e20f967dd56"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 29 20:19:11 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 02 08:01:04 2014 -0700"
      },
      "message": "Reduce and speed-up class def searches.\n\nUse the class linker for descriptor lookups from the compile driver so that\ndex caches are populated.\nReduce the scope of functions for scanning class paths to just the class\nlinker where they are performed.\nIf we see more than a threshold number of find class def misses on a dex file\nlazily compute an index, so that future lookups are constant time (part of the\ncollection code is taken from\nhttps://android-review.googlesource.com/#/c/103865/3). Note that we take a lazy\napproach so that we don\u0027t serialize on loading dex files, this avoids the\nreason the index was removed in 8b2c0b9abc3f520495f4387ea040132ba85cae69.\nRemove an implicit and unnecessary std::string creation for PrintableString.\n\nSingle threaded interpret-only dex2oat performance is improved by roughly 10%.\n\nBug: 16853450\n\nChange-Id: Icf72df76b0a4328f2a24075e81f4ff267b9401f4\n"
    },
    {
      "commit": "6d3fc5615612e500a00aba0a0d331436fae8d996",
      "tree": "5a6426ee19d6398dbc38175b53a71a0b1fb7fad0",
      "parents": [
        "dbc0ca70bcee22561c2f0ab7129a7721369e9aea"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 27 11:47:01 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 28 09:56:32 2014 -0700"
      },
      "message": "Actually ask the pthread implementation for the stack guard size.\n\n(cherry-pick 307091dc306c34ce9e4ee6cc3b467807b3a3bd12.)\n\nBug: 17111575\nChange-Id: I23919b1e8aeff627a65daf57f1109bec60b196cc\n"
    },
    {
      "commit": "1ff3c98775a4577cf053dba9a0c2d5c21c07b298",
      "tree": "2d09c27c69678b53b4c9dc486024f3547efd4bca",
      "parents": [
        "99c251bbd225dd97d0deece29559a430b12a0b66"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 12 02:30:58 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 12 16:08:05 2014 -0700"
      },
      "message": "Avoid use of std::string where we have const char*.\n\nRemoving the ClassHelper caused std::string creation for all calls to\nClass::GetDescriptor and a significant performance regression. Make the\nstd::string an out argument so the caller can maintain it and its life time\nwhile allowing GetDescriptor to return the common const char* case.\n\nDon\u0027t generate GC maps when compilation is disabled.\n\nRemove other uses of std::string that are occuring on critical paths.\nUse the cheaper SkipClass in CompileMethod in CompilerDriver.\nSpecialize the utf8 as utf16 comparison code for the common shorter byte\nencoding.\nForce a bit of inlining, remove some UNLIKELYs (they are prone to pessimizing\ncode), add some LIKELYs.\n\nx86-64 host 1-thread interpret-only of 57 apks:\nBefore: 29.539s\nAfter: 23.467s\n\nRegular compile:\nBefore: 1m35.347s\nAfter: 1m20.056s\n\nBug: 16853450\nChange-Id: Ic705ea24784bee24ab80084d06174cbf87d557ad\n"
    },
    {
      "commit": "68d8b42ddec39ec0174162d90d4abaa004d1983e",
      "tree": "0bb6ccf3b996bb8363c10d07aa39cde221980602",
      "parents": [
        "9c522c2cbbf50dc687728747b37ad59985750b65"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 11:09:10 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 08 08:29:53 2014 -0700"
      },
      "message": "Wire up check JNI force copy mode.\n\nIncrease check JNI checks.\nBreak apart jni_internal.h in to jni_env_ext.h and java_vm_ext.h.\nFix the abuse of ScopedObjectAccess/annotalysis by ScopedCheck in the case\nof VM routines.\nMake class loader override and shared library class loader JNI global\nreferences rather than mirror pointers.\nClean-ups to native bridge.\n\nChange-Id: If7c6110b5aade7a402bfb67534af86a7b2cdeb55\n"
    },
    {
      "commit": "547cdfd21ee21e4ab9ca8692d6ef47c62ee7ea52",
      "tree": "078d52b6025fc1e42b7343550b0dbbdad69eafac",
      "parents": [
        "8b62dc0f993d0445401655fc274e5225498fa81c"
      ],
      "author": {
        "name": "Tong Shen",
        "email": "endlessroad@google.com",
        "time": "Tue Aug 05 01:54:19 2014 -0700"
      },
      "committer": {
        "name": "Tong Shen",
        "email": "endlessroad@google.com",
        "time": "Tue Aug 05 11:11:33 2014 -0700"
      },
      "message": "Emit CFI for x86 \u0026 x86_64 JNI compiler.\n\nNow for host-side x86 \u0026 x86_64 ART, we are able to get complete stacktrace with even mixed C/C++ \u0026 Java stack frames.\n\nTesting:\n1. art/test/run-test --host --gdb [--64] --no-relocate 005\n2. In gdb, run \u0027b art::Class_classForName\u0027 which is implementation of a Java native method, then \u0027r\u0027\n3. In gdb, run \u0027bt\u0027. You should see stack frames down to main()\n\nChange-Id: I2d17e9aa0f6d42d374b5362a15ea35a2fce96302\n"
    },
    {
      "commit": "a59dd80f9f48cb750d329d4d4af2d99d72b484d1",
      "tree": "36958b15842205addaf6d2a13e40823eab47c8bc",
      "parents": [
        "84568fdf08f8f476292996ad653b4453d2894d23"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jul 02 16:28:08 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 22 08:24:14 2014 -0700"
      },
      "message": "Runtime can now be set to require relocation\n\nAdd a pair of runtime flags -Xrelocate and -Xnorelocate that can force\nthe runtime to require that all files that are run are relocated, to\nprevent attacks based on the known art base address.\n\nAdd support for running patchoat on oat files compiled without an image.\n\nChange run-test to have new --prebuild and --relocate flags.\n\nBug: 15358152\n\nChange-Id: I91166c62dd1ab80e5cbcb7883a2cd0d56afca32d\n"
    },
    {
      "commit": "479f131d4bd3829dd512312020808b05f5a591f1",
      "tree": "a826b9fe32a5d107263c4bdda6f6255a7c7cd301",
      "parents": [
        "e66f6318635c49313f796e62170fa8f59340e926",
        "4c13a3ff475f206c4d0a86ee2595c45392fd942f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 16 19:55:08 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 16 16:25:15 2014 +0000"
      },
      "message": "Merge \"Disable adding main and non moving spaces to immune region in GSS\""
    },
    {
      "commit": "4c13a3ff475f206c4d0a86ee2595c45392fd942f",
      "tree": "5a96dff1dd5952aa70c2f25de46ea89d93e9225b",
      "parents": [
        "524e5e3815d2b16ee77beda9976b7ec3aa54aba6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jul 14 14:57:16 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 16 12:34:43 2014 -0700"
      },
      "message": "Disable adding main and non moving spaces to immune region in GSS\n\nDisabled adding the main and non moving space to the immune region.\nThis will enable us to recycle bump pointer spaces for malloc space\n-\u003e malloc space compaction as well as collector transitions.\n\nAlso added logic for falling back to the non moving space, we may\ncopy objects there.\n\nRefactored mod union table logic into MarkReachableObjects.\n\nNo measurable performance benefit or regression.\n\nBug: 14059466\nBug: 16291259\n\nChange-Id: If663d9fdbde943b988173b7f6ac844e5f78a0327\n"
    },
    {
      "commit": "e63db27db913f1a88e2095a1ee8239b2bb9124e8",
      "tree": "893dee6783bca6717259321a6e4ba029c9c123e2",
      "parents": [
        "07b8441303ea82fca3cb85d71ecf8752d73cedd7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 15:36:11 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 17:07:49 2014 -0700"
      },
      "message": "Break apart header files.\n\nCreate libart-gtest for common runtime and compiler gtest routines.\nRename CompilerCallbacksImpl that is quick compiler specific.\nRename trace clock source constants to not use the overloaded profiler term.\n\nChange-Id: I4aac4bdc7e7850c68335f81e59a390133b54e933\n"
    },
    {
      "commit": "98d1cc8033251c93786e2fa8c59a2e555a9493be",
      "tree": "f0a76b8fff060ee484af09028da65a8339d57057",
      "parents": [
        "aebf3cda094f34cf846d19a7724bdc8005267c95"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu May 15 17:02:16 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jul 11 17:17:10 2014 -0700"
      },
      "message": "Improve performance of invokevirtual/invokeinterface with embedded imt/vtable\n\nAdd an embedded version of imt/vtable into class object. Both tables start at\nfixed offset within class object so method/entry point can be loaded directly\nfrom class object for invokeinterface/invokevirtual.\n\nBug: 8142917\nChange-Id: I4240d58cfbe9250107c95c0708c036854c455968\n"
    },
    {
      "commit": "53cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3c",
      "tree": "c0129ef3de7148dc6a114449b4f751a560283eb0",
      "parents": [
        "ae2efea4582df773f80be274bdc754f732b07df3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 12 11:26:29 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jul 07 15:19:58 2014 -0700"
      },
      "message": "Add patchoat tool to Art.\n\nAdd a new executable called patchoat to art. This tool takes already\ncompiled images and oat files and changes their base address, acting as\na cheap form of relocation.\n\nAdd a --include-patch-information flag to dex2oat and code to add\nrequired patch information to oat files created with the quick compiler.\n\nBug: 15358152\n\nChange-Id: Ie0c580db45bb14ec180deb84930def6c3628d97d\n"
    },
    {
      "commit": "c200a4abeca91e19969f5b35543f17f812ba32b9",
      "tree": "5912a08310e7ddb4b3907c0dc687006669c0cedd",
      "parents": [
        "73904fed884bf216b51acdc64402c427cc34725b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 16 18:39:09 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 01 11:06:24 2014 -0700"
      },
      "message": "ART: Rework Generic JNI, add ARM version\n\nRefactors and optimizes Generic JNI. This version uses TwoWordReturn\nto avoid writing to / loading from the bottom of the alloca.\n\nChange-Id: I3287007c976f79c9fd32d3b3a43f2d1371bf4cd3\n"
    },
    {
      "commit": "833a48501d560c9fa7fc78ef619888138c2d374f",
      "tree": "add308298a5486d44caddea120cc9200dd70c38a",
      "parents": [
        "b849f6dd638fd1246724160cd5c01ab1a5ff33bd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 21 18:46:59 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 25 19:34:58 2014 -0700"
      },
      "message": "ART: Native support for multidex\n\nNative support for zip files with multiple classesX.dex.\n\nWorks by explicitly looking for those files in ascending order. As\nthese files have no file system representation for themselves,\nintroduce synthetic dex locations: the name of the originating file\nplus a colon plus the name of the dex file, e.g., test.jar:classes2.dex.\n\nOpening a zip dex file will return all dex files in this way. This\nkeeps the changes to dex2oat minimal.\n\nTo hide multidex/synthetic names from the Java layer, let the handle\nof dalvik.system.DexFile refer to a vector of DexFile objects. When\nopening a location, test possible synthetic names and add them to the\nvector. Thus, the original multidex jar in the classpath will be\nassociated with all embedded dex files.\n\nChange-Id: I0de107e1369cbc94416c544aca3b17525c9eac8b\n"
    },
    {
      "commit": "f5997b4d3f889569d5a2b724d83d764bfbb8d106",
      "tree": "f0d3b3890a604a8b3c4c87c0f408f86df041690e",
      "parents": [
        "9658d24deaa9bd07781bfac860d2a6dd89066d55"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 20 10:37:54 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 24 13:45:05 2014 -0700"
      },
      "message": "More advanced timing loggers.\n\nThe new timing loggers have lower overhead since they only push into\na vector. The new format has two types, a start timing and a stop\ntiming. You can thing of these as brackets associated with a\ntimestamp. It uses these to construct various statistics when needed,\nsuch as: Total time, exclusive time, and nesting depth.\n\nChanged PrettyDuration to have a default of 3 digits after the decimal\npoint.\n\nExaple of a GC dump with exclusive / total times and indenting:\nI/art     (23546): GC iteration timing logger [Exclusive time] [Total time]\nI/art     (23546):   0ms InitializePhase\nI/art     (23546):   0.305ms/167.746ms MarkingPhase\nI/art     (23546):     0ms BindBitmaps\nI/art     (23546):     0ms FindDefaultSpaceBitmap\nI/art     (23546):     0ms/1.709ms ProcessCards\nI/art     (23546):       0.183ms ImageModUnionClearCards\nI/art     (23546):       0.916ms ZygoteModUnionClearCards\nI/art     (23546):       0.610ms AllocSpaceClearCards\nI/art     (23546):       1.373ms AllocSpaceClearCards\nI/art     (23546):     0.305ms/6.318ms MarkRoots\nI/art     (23546):       2.106ms MarkRootsCheckpoint\nI/art     (23546):       0.153ms MarkNonThreadRoots\nI/art     (23546):       4.287ms MarkConcurrentRoots\nI/art     (23546):     43.461ms UpdateAndMarkImageModUnionTable\nI/art     (23546):     0ms/112.712ms RecursiveMark\nI/art     (23546):       112.712ms ProcessMarkStack\nI/art     (23546):     0.610ms/2.777ms PreCleanCards\nI/art     (23546):       0.305ms/0.855ms ProcessCards\nI/art     (23546):         0.153ms ImageModUnionClearCards\nI/art     (23546):         0.610ms ZygoteModUnionClearCards\nI/art     (23546):         0.610ms AllocSpaceClearCards\nI/art     (23546):         0.549ms AllocSpaceClearCards\nI/art     (23546):       0.549ms MarkRootsCheckpoint\nI/art     (23546):       0.610ms MarkNonThreadRoots\nI/art     (23546):       0ms MarkConcurrentRoots\nI/art     (23546):       0.610ms ScanGrayImageSpaceObjects\nI/art     (23546):       0.305ms ScanGrayZygoteSpaceObjects\nI/art     (23546):       0.305ms ScanGrayAllocSpaceObjects\nI/art     (23546):       1.129ms ScanGrayAllocSpaceObjects\nI/art     (23546):       0ms ProcessMarkStack\nI/art     (23546):   0ms/0.977ms (Paused)PausePhase\nI/art     (23546):     0.244ms ReMarkRoots\nI/art     (23546):     0.672ms (Paused)ScanGrayObjects\nI/art     (23546):     0ms (Paused)ProcessMarkStack\nI/art     (23546):     0ms/0.610ms SwapStacks\nI/art     (23546):       0.610ms RevokeAllThreadLocalAllocationStacks\nI/art     (23546):     0ms PreSweepingGcVerification\nI/art     (23546):   0ms/10.621ms ReclaimPhase\nI/art     (23546):     0.610ms/0.702ms ProcessReferences\nI/art     (23546):       0.214ms/0.641ms EnqueueFinalizerReferences\nI/art     (23546):         0.427ms ProcessMarkStack\nI/art     (23546):     0.488ms SweepSystemWeaks\nI/art     (23546):     0.824ms/9.400ms Sweep\nI/art     (23546):       0ms SweepMallocSpace\nI/art     (23546):       0.214ms SweepZygoteSpace\nI/art     (23546):       0.122ms SweepMallocSpace\nI/art     (23546):       6.226ms SweepMallocSpace\nI/art     (23546):       0ms SweepMallocSpace\nI/art     (23546):       2.144ms SweepLargeObjects\nI/art     (23546):     0.305ms SwapBitmaps\nI/art     (23546):     0ms UnBindBitmaps\nI/art     (23546):   0.275ms FinishPhase\nI/art     (23546): GC iteration timing logger: end, 178.971ms\n\nChange-Id: Ia55b65609468f212b3cd65cda66b843da42be645\n"
    },
    {
      "commit": "836424805dd48af67088d30992a3f2e6841ca047",
      "tree": "7ef4b2fbe4ec82f3845f201f1a3befe70571739d",
      "parents": [
        "3283ade469f515f89d70cf47b6ac6fe1814147f2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 11 12:12:07 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 11 14:07:28 2014 +0100"
      },
      "message": "Add D/CHECK_CONSTEXPR macros for use in constexpr context.\n\nMake most RegStorage methods constexpr, make StorageSize()\nconst.\n\nChange-Id: Ie63faa3b081094b3dd30352c6240fdf10ef8b87e\n"
    },
    {
      "commit": "576ca0cd692c0b6ae70e776de91015b8ff000a08",
      "tree": "de632fae7ee9f096e7a2c54a7fcdace8f6ae7106",
      "parents": [
        "e21bf0099117b82963cdf7f95a1b8dabfcf29397"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jun 06 15:58:22 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jun 06 16:27:45 2014 -0700"
      },
      "message": "Reduce header files including header files.\n\nMain focus is getting heap.h out of runtime.h.\n\nChange-Id: I8d13dce8512816db2820a27b24f5866cc871a04b\n"
    },
    {
      "commit": "c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6",
      "tree": "250455427da979409a075a2b3197bd43ccd40fe1",
      "parents": [
        "bb0b53f58f11c628f077603b56077dfed1a18f11"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri May 30 23:44:11 2014 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 06 12:14:01 2014 +0100"
      },
      "message": "Fixed and refactored profiler options handling\n\n- extracted profiler options in a separate class\n- switched from system property reading to command line arguments\n- added profile based compilation options to CompilerOptions\n- removed no longer used kProfile compilation filter\n- optimize dex files only if the profiler is enabled\n- clean up unused arguments\n\nBug: 12877748\nBug: 15275634\nChange-Id: I37ff68e7694370950ce8db2360562e9058ecebb7\n"
    },
    {
      "commit": "bb0b53f58f11c628f077603b56077dfed1a18f11",
      "tree": "013482db95e8f2dcb7c7be85fc8f35df2c7f1361",
      "parents": [
        "e4283be97047a26d3476acd3863dcc386498be17"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri May 23 17:33:29 2014 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 06 11:53:28 2014 +0100"
      },
      "message": "Clean up the sampling profiler\n\n- rename variables/fields names to match the code style (use\n_underscore_names_)\n- extract common property parsing in utils.cc\n- fail to load profile file if any line is malformed\n- added ProfileFile to manage the profile data generate in the previous\nruns (replaces ProfileHelper and nests ProfileData)\n\nBug: 12877748\nChange-Id: Ie7bda30bfdeb7e78534c986615b0649eac12a97b\n"
    },
    {
      "commit": "2afe49450f2e018f18b5de45428b9174bfd6f196",
      "tree": "2d6f96d2dfc4c8baaef172259a824708e510225e",
      "parents": [
        "84e524207b23d58a1b1e5f4443000ccac97c4184"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon May 19 10:25:33 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon May 19 10:26:17 2014 -0700"
      },
      "message": "Follow up to \"Add ISA directory to image and odex pathnames.\"\n\nChange-Id: I7f08cc3052fbed93a56ccf1ab7675ae8bc129da9\n"
    },
    {
      "commit": "0e12bdc49744eb6d5c29b9611a8dbe10bac4cd53",
      "tree": "aba31f1d671b4816fb63fca00b985ab0d2b6a12b",
      "parents": [
        "de1129a26e0474ea8bb9112938ebb867163969fd"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed May 14 17:44:28 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri May 16 16:14:50 2014 -0700"
      },
      "message": "Add ISA directory to image and odex pathnames.\n\nBug: 14882223\nBug: 14694978\nChange-Id: Ic1b5ae836b8e91ea461dcd4f3da8e38dc3bec00f\n"
    },
    {
      "commit": "8194963098247be6bca9cc4a54dbfa65c73e8ccc",
      "tree": "547cc708e06e6541676b17066023ae6f07b2049b",
      "parents": [
        "56a341a82ece9aa4f2a071629f3e1fd1adf988ae"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 02 11:53:22 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 02 12:21:02 2014 +0100"
      },
      "message": "Replace CountOneBits and __builtin_popcount with POPCOUNT.\n\nClean up utils.h, make some functions constexpr.\n\nChange-Id: I2399100280cbce81c3c4f5765f0680c1ddcb5883\n"
    },
    {
      "commit": "11d9f06a96a6909905c248ed684366190140095c",
      "tree": "27b02ab216b98ba1656d66072fd46c5adec61242",
      "parents": [
        "b3016551e5f264264dbb633a1ddf03ac97f9c66c"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Apr 23 20:24:57 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 01 11:25:07 2014 +0100"
      },
      "message": "Use instruction specific dalvik cache dirs.\n\n- All oat \u0026 art files are now placed under /data/dalvik-cache/\u003cisa\u003e/.\n- GetDalvikCacheOrDie now requires a mandatory subdirectory argument,\n  and is implicitly rooted under /data/.\n- Added helper methods to convert InstructionSet enums into strings\n  and vice versa.\n\n(cherry picked from commit 2974bc3d8a5d161d449dd66826d668d87bdc3cbe)\n\nChange-Id: Ic7986938e6a7091a2af675ebafec768f7b5fb8cd\n"
    },
    {
      "commit": "a2cee18799d7e61adb037a4219adb23fef7d022b",
      "tree": "214a6d6d4682196aa0e2ebcb5a0cc7bcf3eec2d3",
      "parents": [
        "ed0bc0bbf26f6751f31213d24ccdac49766e93ff"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 16 19:13:59 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 18 15:32:15 2014 -0700"
      },
      "message": "Modify unwind to comply with stack parser tools.\n\nBug: 14081592\n\nChange-Id: I6906b2575c74d64f1c3ba7602779b3a789de1c69\n"
    },
    {
      "commit": "af13ad9fd18b6f75fe82e7995224c55654594f93",
      "tree": "11c1fcb73bd31f90216cb1b588f56ff6abf74b85",
      "parents": [
        "9b417e4f0f87da6bfe8dc5f02c987acfcb6dca31"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 11 12:07:48 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 14 11:39:45 2014 -0700"
      },
      "message": "Centralize instruction-set pointer-size, alignment, 64b-width code\nin instruction_set.h/cc\n\nThis allows to clean up some places that currently make explicit\ncomparisons.\n\nChange-Id: I0dcc924c52fa53306f706aceea93a2d4a655c5df\n"
    },
    {
      "commit": "067d20fd2fddd947ce3a014d023e9de249082ebe",
      "tree": "22ebe9335ce783d6b4cfaa311281e001d578ac12",
      "parents": [
        "8785d615122d4abbd22db702139584e8c472f502"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Mar 05 14:57:21 2014 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 06 13:38:41 2014 -0800"
      },
      "message": "backtrace: use Java stack to help decode native\n\nBefore change:\n\n  native: usb_host_run+16 [0x400a43f9] (/libusbhost.so)\n  native: android::Vector\u003cint\u003e::do_move_forward(void*, void const*, unsigned int) const+54 [0x501b1c5b] (/libandroid_servers.so)\n  native: ??? [0x624de480] (/system@framework@boot.oat)\n  at com.android.server.usb.UsbHostManager.monitorUsbHostBus(Native method)\n  at com.android.server.usb.UsbHostManager.access$000(UsbHostManager.java:38)\n\nAfter change:\n\n  native: usb_host_run+16 [0x400933f9] (libusbhost.so)\n  native: android::Vector\u003cint\u003e::do_move_forward(void*, void const*, unsigned int) const+54 [0x4e984c5b] (libandroid_servers.so)\n  native: Java_com_android_server_usb_UsbHostManager_monitorUsbHostBus__+92 [0x624de480] (system@framework@boot.oat)\n  at com.android.server.usb.UsbHostManager.monitorUsbHostBus(Native method)\n  at com.android.server.usb.UsbHostManager.access$000(UsbHostManager.java:38)\n\nChange-Id: Iea550a251a12e9ba7df9582fd454093bfa4e90e0\n"
    },
    {
      "commit": "a2806550cefb7c70781d8ee6279e6ad5769804cb",
      "tree": "464c0dd8018379c65db92772644de5d426f2949d",
      "parents": [
        "95c2e440582f31f77a047797a5e2be4af53a8bfa"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Feb 27 12:29:32 2014 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Feb 27 12:29:32 2014 -0800"
      },
      "message": "Remove some stray stringpiece.h includes\n\nBug: 13186058\nChange-Id: I2cb313425864a5d4e988fcf71a99c60ad63c63fb\n"
    },
    {
      "commit": "6449c62e40ef3a9bb75f664f922555affb532ee4",
      "tree": "2f1b2120bd648c95dea32b68c8e168e42c8e24fd",
      "parents": [
        "3fcf18e25241253f23efbeebe77b2a4c4a7c54d3"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Feb 10 23:48:36 2014 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Feb 24 14:24:12 2014 -0800"
      },
      "message": "Create CompilerOptions\n\nPackage up most compiler related options in CompilerOptions. Details include:\n- Includes compiler filter, method thresholds, SEA IR mode.\n- Excludes those needed during Runtime::Init such as CompilerCallbacks and VerificationResults.\n- Pass CompilerOptions to CompilerDriver.\n- Remove CompilerOptions from Runtime.\n- Add ability to pass options for app and image dex2oat to runtime via\n  -Xcompiler-option and -Ximage-compiler-option respectively.\n\nOther\n- Replace 2x CompilerCallbacks implementations with one.\n- Factor out execv code for use by both image and oat generation.\n- More OatFile error_msg reporting.\n- DCHECK for SuspendAll found trying to run valgrind.\n\nChange-Id: Iecb57da907be0c856d00c3cd634b5042a229e620\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": "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": "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": "7020278bce98a0735dc6abcbd33bdf1ed2634f1d",
      "tree": "533cf9a77046a49525d916043a58949e59319f2d",
      "parents": [
        "67f128a4023bbbe55827dd2c11ed0538ee387233"
      ],
      "author": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Tue Oct 22 17:52:19 2013 -0700"
      },
      "committer": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Tue Nov 05 16:48:53 2013 -0800"
      },
      "message": "Support hardware divide instruction\n\nBug: 11299025\n\nUses sdiv for division and a combo of sdiv, mul and sub for modulus.\nOnly does this on processors that are capable of the sdiv instruction, as determined\nby the build system.\n\nAlso provides a command line arg --instruction-set-features\u003d to allow cross compilation.\nMakefile adds the --instruction-set-features\u003d arg to build-time dex2oat runs and defaults\nit to something obtained from the target architecture.\n\nProvides a GetInstructionSetFeatures() function on CompilerDriver that can be\nqueried for various features.  The only feature supported right now is hasDivideInstruction().\n\nAlso adds a few more instructions to the ARM disassembler\n\nb/11535253 is an addition to this CL to be done later.\n\nChange-Id: Ia8aaf801fd94bc71e476902749cf20f74eba9f68\n"
    },
    {
      "commit": "0941b0423537a6a5d7c1df6dd23e9864ea8f319c",
      "tree": "096ced0f53465880a334d0150ef01e419db9a967",
      "parents": [
        "9780099e445884d8bc9444c8c1261b02d80a26c7"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Nov 05 11:34:03 2013 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Nov 05 11:35:01 2013 -0800"
      },
      "message": "Fix a DCHECK failure due to unmatching numbers of cards scanned.\n\n- See the bug for details of the failure.\n- After a discussion, we decided to get rid of the DCHECK as a simple\n  solution would not detect corner failure cases and a full solution\n  would add undesired complexity, and left a comment that explains\n  what situation had caused a DCHECK failure.\n- Fix a potential error of failing to scan the last card that the end\n  of the image space falls on as a result of the image end being not\n  necessarily aligned by the card size.\n- Remove dead/unused MarkSweep::ScanRoot().\n- Add AlignUp and AlignDown for aligning pointers.\n\nBug: 11465268\nChange-Id: Iee3018a42c48a159feb0e9cf77b1a6b303f5d245\n"
    },
    {
      "commit": "8d31bbd3d6536de12bc20e3d29cfe03fe848f9da",
      "tree": "2373ae08ddddaf1034623df85d647ecf9ac6c831",
      "parents": [
        "57e6d8a99058e5c74d5244b68a5f4d53526fa108"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Oct 13 10:44:14 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 21 17:01:11 2013 -0700"
      },
      "message": "Throw IOException at source of failing to open a dex file.\n\nBefore is:\njava.lang.ClassNotFoundException: Didn\u0027t find class \"GCBench\" on path: DexPathList[[zip file \"/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar\"],nativeLibraryDirectories\u003d[/disk2/dalvik-dev/out/host/linux-x86/lib]]\n        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)\n        Suppressed: java.lang.ClassNotFoundException: GCBench\n                at java.lang.Class.classForName(Native Method)\n                at java.lang.BootClassLoader.findClass(ClassLoader.java:781)\n                at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)\n                at java.lang.ClassLoader.loadClass(ClassLoader.java:504)\n                ... 1 more\n        Caused by: java.lang.NoClassDefFoundError: Class \"LGCBench;\" not found\n                ... 5 more\nAnd after is:\njava.lang.ClassNotFoundException: Didn\u0027t find class \"GCBench\" on path: DexPathList[[zip file \"/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar\"],nativeLibraryDirectories\u003d[/disk2/dalvik-dev/out/host/linux-x86/lib]]\n        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)\n        Suppressed: java.io.IOException: Zip archive \u0027/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar\u0027 doesn\u0027t contain classes.dex\n                at dalvik.system.DexFile.openDexFile(Native Method)\n                at dalvik.system.DexFile.\u003cinit\u003e(DexFile.java:80)\n                at dalvik.system.DexFile.\u003cinit\u003e(DexFile.java:59)\n                at dalvik.system.DexPathList.loadDexFile(DexPathList.java:268)\n                at dalvik.system.DexPathList.makeDexElements(DexPathList.java:235)\n                at dalvik.system.DexPathList.\u003cinit\u003e(DexPathList.java:113)\n                at dalvik.system.BaseDexClassLoader.\u003cinit\u003e(BaseDexClassLoader.java:48)\n                at dalvik.system.PathClassLoader.\u003cinit\u003e(PathClassLoader.java:38)\n                at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:128)\n                at java.lang.ClassLoader.access$000(ClassLoader.java:65)\n                at java.lang.ClassLoader$SystemClassLoader.\u003cclinit\u003e(ClassLoader.java:81)\n                at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:137)\n        Suppressed: java.lang.ClassNotFoundException: GCBench\n                at java.lang.Class.classForName(Native Method)\n                at java.lang.BootClassLoader.findClass(ClassLoader.java:781)\n                at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)\n                at java.lang.ClassLoader.loadClass(ClassLoader.java:504)\n                ... 1 more\n        Caused by: java.lang.NoClassDefFoundError: Class \"LGCBench;\" not found\n                ... 5 more\n\nAlso, move dex file verifier messages out of logs.\nIn the process the ClassLinker::dex_lock_ needed tidying to cover a smaller\nscope. Bug 11301553.\n\nChange-Id: I80058652e11e7ea63457cc01a0cb48afe1c15543\n"
    },
    {
      "commit": "80f85137828f3ada45de7beb0acd2888ed7b3b24",
      "tree": "e87734c162a6da19f28edb3bd18ff7620fce747c",
      "parents": [
        "acab9fa3b3b45e5cd0d63d06073f6a6008eb720a",
        "7c79841982c3f3c2fd7fba0d338a52a27c50bc52"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Oct 04 11:10:40 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 04 11:10:40 2013 -0700"
      },
      "message": "am 7c798419: am 7c3d13ae: Use file magic to determine file type, not file extension.\n\n* commit \u00277c79841982c3f3c2fd7fba0d338a52a27c50bc52\u0027:\n  Use file magic to determine file type, not file extension.\n"
    },
    {
      "commit": "7c3d13aebdd8611cae58a1048bffb13cbdc465cb",
      "tree": "23f2415bb38e77b0d53c1de06c37a133c7b08e51",
      "parents": [
        "f15242943a7a836966cd521e3095a4b731695c71"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Sep 04 17:15:11 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Oct 03 17:00:39 2013 -0700"
      },
      "message": "Use file magic to determine file type, not file extension.\n\nBug: 10614658\nChange-Id: I9156dfca78ac8cd1c62fb258825cc791629270a4\n"
    },
    {
      "commit": "2921201dce37ba40c55b89c0deca3c34bf64168e",
      "tree": "2222b4bf7a53864c1bf514bb68e0053a966da3e5",
      "parents": [
        "bb0140e051e62ca0b51b0870c2386ae3110b0556"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Sep 12 22:18:30 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Sep 23 22:43:29 2013 -0700"
      },
      "message": "Remove some non-const references in utils\n\nChange-Id: Ib2d3c39fadb6a750c68c37b0aa53daab155a65a3\n"
    },
    {
      "commit": "caacdf326cfe09decfca0a15c62ebe10b774e05e",
      "tree": "d1f0fe587a4d19ba613226fdbde8c3b9f87d70b4",
      "parents": [
        "0f72e4136aecaf6976fdb55916bbd7b6d5c9c77b"
      ],
      "author": {
        "name": "Anwar Ghuloum",
        "email": "anwarg@google.com",
        "time": "Thu Sep 19 17:29:21 2013 -0700"
      },
      "committer": {
        "name": "Anwar Ghuloum",
        "email": "anwarg@google.com",
        "time": "Thu Sep 19 17:34:13 2013 -0700"
      },
      "message": "Fix dumpsys meminfo for art\n\nBUG:10112253\nChange-Id: I2a34cc0841bdcf922c4ab4eadda360313858a0d6\n"
    },
    {
      "commit": "720ef7680573c1afd12f99f02eee3045daee5168",
      "tree": "2c08ce225d8e6280bd0b4fa75ccf1369be3b8cc2",
      "parents": [
        "5bf1d38c0f0294a6632c0c6b2c0ba6bd642aa1c0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Aug 17 14:46:54 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Aug 19 09:26:23 2013 -0700"
      },
      "message": "Fix non concurrent GC ergonomics.\n\nIf we dont have concurrent GC enabled, we need to force GC for alloc\nwhen we hit the maximum allowed footprint so that our heap doesn\u0027t\nkeep growing until it hits the growth limit.\n\nRefactored a bit of stuff.\n\nChange-Id: I8eceac4ef01e969fd286ebde3a735a09d0a6dfc1\n"
    },
    {
      "commit": "57dac6ed61a0a25c14d4e2fabc84435578d42360",
      "tree": "9cb004e94b313f8aae2b0a29b4b9241bd207ec74",
      "parents": [
        "a68f43fa91531b2e8fe73fa5a5731f18a80ff801"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 15 16:36:24 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 15 16:36:24 2013 -0700"
      },
      "message": "Fix sampling profiler to use thread\u0027s cpu clock.\n\nThe sampling profiler was using the sampling thread\u0027s cpu clock to\nmeasure cpu time, instead of the sampled thread\u0027s cpu clock.\n\nChange-Id: Ief1f82e07e0353192c61521f67dec7a761905f64\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": "0a9dc05e704bfd033bac2aa38a4fc6f6b8e6cf93",
      "tree": "ceee6b2676b4fbcee37d98bbb3b6e063bcbdd9b2",
      "parents": [
        "d792cc1569c3505d68352c11a72447419ee6eaaf"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 25 11:01:28 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 25 15:30:43 2013 -0700"
      },
      "message": "GC data structures allocation tracking\n\nAdds a new stl compatible allocator that is used in most GC data\nstructures. When the data structures allocate and free memory, it\nlets the heap know of how much memory was allocated or freed. Using\nthis info, we dump the approximated stl data structures memory usage\nwhen a sigquit occurs.\n\nThe allocation tracking can be disabled with a compile time boolean\nflag to remove performance impact.\n\nChange-Id: Idddb6713169e07be913bceeb50f305c8573e4392\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": "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": "7675e16bcae06c0fe258aad89b3d511037dec399",
      "tree": "7b1ef4555225ba2e6d9b63fe61549c52d291a757",
      "parents": [
        "5f4bd97519aad4f075346f8c5c0a84c6105951d8"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jun 10 16:18:04 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jun 10 16:18:04 2013 -0700"
      },
      "message": "Rename art-cache to dalvik-cache\n\nChange-Id: I294995066aecc29fbd739c3e9e6f60934f743064\n"
    },
    {
      "commit": "4ef3e45d7c6ec3c482a1a48f4df470811aa3cf0a",
      "tree": "5d91ff23708048a2b453a5917dab82be1b545f91",
      "parents": [
        "f84f99fe3a944310fdfb6f17836079ac5c48c799"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Dec 14 13:35:28 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Feb 06 12:16:33 2013 -0800"
      },
      "message": "Compiler constant handling rework\n\nIn preparation for de-optimization, reworked the constant\nhandling mechanism.  Also took advantage of knowledge of\nconstant operands (particularly for long operations).\n\nSignificant performance improvements for Mandelbrot\n(~60 seconds to ~34 seconds).  Minor improvements in other\nbenchmarks.\n\nThe new constant handling breaks two of the existing\noptimization passes: \"Skip Large Method\" and \"Load/Store\nElimization.\"\n\nI don\u0027t intend to update the large method optimization\nbecause it will be superceeded by the upcoming interpreter/\nfingerprinting mechanism.  Leaving the code in place for\nnow in order to compare compile-time improvements with\nfingerprinting/interpret.  All related code will be deleted\nwhen that is complete.\n\nThe load/store elimination pass needs some rework to handle\nuses of multiple-register loads and stores.  It will be\nupdated \u0026 restored in a future CL.\n\nChange-Id: Ia979abaf51b8ae81bbb0428031cbcea854625fac\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": "56edc432fa914f7ccfa87ce443e64f5ef475666d",
      "tree": "4e05c32f3524043614a2f368a6d49f7f3bc24616",
      "parents": [
        "d75afb99f0c8b8a27ad84e2e31010383ecf72120"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jan 18 16:51:51 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jan 22 08:47:33 2013 -0800"
      },
      "message": "Support for contention logging with ART futexes.\n\nRemove dangerous postfix operators on AtomicInteger. Clean up the atomic stack.\nFactor nanosleep into a useful shared utils.h routine.\n\nChange-Id: I417a73007c23fe247f410f41b2fa41a717c22139\n"
    },
    {
      "commit": "e222ee0b794f941af4fb1b32fb8224e32942ea7b",
      "tree": "0b9f5fe6398663c9d871881cf7de28eca8bdfc6f",
      "parents": [
        "1aa246dec5abe212f699de1413a0c4a191ca364a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 13 14:41:43 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 13 15:24:45 2012 -0800"
      },
      "message": "Move stringpiece.h and stringprintf.h to base/.\n\nChange-Id: I7f71b4a12f99c5f81771146c66629ae5a947b229\n"
    },
    {
      "commit": "07ed66b5ae659c452cbe1ab20c3dbf1d6f546461",
      "tree": "2350745da33df6fcb9fb0c9059e55ea5d5ea8f67",
      "parents": [
        "76b6167407c2b6f5d40ad895b2793a6b037f54b2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 12 18:34:25 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 12 18:35:05 2012 -0800"
      },
      "message": "Move logging.h into base/logging.h.\n\nChange-Id: Id68f85f7c3a71b156cb40dec63f94d4fb827f279\n"
    },
    {
      "commit": "d22d54849c96760aa1efa259d6dcfbace54da2af",
      "tree": "ad8615e7fa305ca768aee9ac43963ab10bcdda49",
      "parents": [
        "d21df09a54b08fbf90f9eb64801f0b03a100b8ec"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 06 17:14:12 2012 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 12 12:06:01 2012 -0800"
      },
      "message": "Remove first GC pause.\n\nFixed error where we were prefetching the address of address of\nobjects.\n\nRemove first paused by removing get dirty cards and replacing it\nwith card aging. We now age the cards before doing the checkpoint\ninstead of clearing them. This lets us know which cards were\ndirtied before the start of the GC and which cards were dirtied\nafter.\n\nOptimized FreeList slightly.\n\nChange-Id: I39d6aac1839476d7541d83970c8b27b266e8a117\n"
    },
    {
      "commit": "bcc2926b9721f94c17ed98fae5264cc98f0e066f",
      "tree": "ebc059463499b973804d52e0bba593a12cd0326e",
      "parents": [
        "af6eaca5034a602f459a6eca9fb185f3abe8a882"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Nov 02 11:36:03 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Nov 02 17:00:27 2012 -0700"
      },
      "message": "Add dex2oat watch dog thread for host builds\n\nChange-Id: I90b4b6b3a1aebb82955b4aa84d3f2d599af1d13b\n"
    },
    {
      "commit": "120f1c74a9768e958377b6c97897511b27ae58c8",
      "tree": "fa1f90d88ea34d8ef9eec729d27c7a70956a6a09",
      "parents": [
        "cabc60e71a65fa17e5a99fba94fc61523fbeb478"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 28 17:17:10 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 03 17:29:26 2012 -0700"
      },
      "message": "Fail threads attaching during runtime shutdown.\n\nIntroduce counters to indicate that threads are being born. Don\u0027t allow\nthread birth to occur during runtime shutdown.\n\nBug: 7000936\n\nChange-Id: Ib0d78f78c0ff126a4b5d3b5a6f1a2ff8f5061ae9\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": "ba0b9c55adce3f533845ab1b25c552589e5b4118",
      "tree": "053ae9ce87645f18eb380e9709a93ef7608452d9",
      "parents": [
        "46c6bb2f52cef82660b9be7576b49f83845df93a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 20 11:25:12 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 20 11:25:12 2012 -0700"
      },
      "message": "Add the native thread state to art SIGQUIT dumps.\n\nBug: 7053953\nChange-Id: I9be3f828332e5bbb003644802d7770b58d8298ed\n"
    },
    {
      "commit": "4c70d77decc1217c8b1ebf8126b8d9d024c75d82",
      "tree": "cee4d83f26615a62ecbedaa74ae1bdb0a1113585",
      "parents": [
        "15b962f1c2eaee7a3d668f26e4e20faeb29f13d8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 10 14:08:32 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 10 15:41:46 2012 -0700"
      },
      "message": "Fix error in PrettyType.\n\nPrettyType was incorrectly adding a space at the end of the type.\n\nAlso added a brief comment explaining what pretty type does.\n\nChange-Id: Ia8b6f583a44d86a8c0db5efcd9ad495b686995d3\n"
    },
    {
      "commit": "18c24b6e05e7591069f1a2ac9c614b28fc0853ac",
      "tree": "cf1d9507d4cba52017f71fd7073ff565a90b8c36",
      "parents": [
        "1a0806c6847a9dc5cc6d73460d7e8ad3183b5c49"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 10 08:54:25 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 10 09:42:13 2012 -0700"
      },
      "message": "Add new_array type info to dex dump output.\n\nAlso cleaned up a bit of the field printing.\n\nChange-Id: Ia731d58b16f554fde9a9ac733f4d4f0148e55ac9\n"
    },
    {
      "commit": "0325e6296d2370c42e7be80d846bfc7f8b28423b",
      "tree": "3e7e2192b3756ed1ee70921910ded374189dd5ad",
      "parents": [
        "581b2ea85d9b382f6b14efadc9d2d36b526ef7c5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Sep 05 14:22:51 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 06 15:57:22 2012 -0700"
      },
      "message": "Cumulative timing logger\n\nAdded a new class: Cumulative timing logger. This logger enables us to get an average of how long each Gc phase takes.\n\nChange-Id: I87874d4c25b5935ef30ef593a9bd36a27e45ae14\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": "357e9be24c17a6bc2ae9fb53f25c73503116101d",
      "tree": "a170276eabf319d107242f928a68463fe0b5ebfb",
      "parents": [
        "66aee5cd571cf4739d2735769304202ea5051fb8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 01 11:00:14 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 17 10:06:50 2012 -0700"
      },
      "message": "Sticky mark bits \"generational\" GC\n\nSticky mark bits GC. Sticky mark bits implemented using allocation stack which enables us to use the previous GC live bitmap as the mark bitmap.\n\nRemoved heap_end_ since checking versus it caused more overhead than it saved.\n\nRemoved check for impossible allocations at the start of AllocObject since these allocations will just fall through and fail anyways.\nThese allocations do not happen often enough for it to be worth checking for.\n\nA bunch of constant optimization performance improvements.\n\nPre locking regression benchmark improvements:\nDeltablue: ~0.3 sec runtime.\nCaffeineMark: ~300 total score due to improved string score.\n\nChange-Id: I15016f1ae7fdf76fc3aadb5774b527bf802d9701\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": "289be85116aaf7c48413858b5d0448868b4e61f3",
      "tree": "b9302aa89850df080b43d0ca0ddb3636463fb22c",
      "parents": [
        "08fcb2591b4e60eee41d0aab92f3bcc36784fa5a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 13:57:20 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 13:57:20 2012 -0700"
      },
      "message": "Include the crashing thread\u0027s name in crash dumps.\n\nChange-Id: I7fd821e3f390fde3a7280689292373d413218893\n"
    },
    {
      "commit": "46e251bf7200cc06f5a9a82ee2030e650f5e1443",
      "tree": "9cfe6a0184fd07cd77819702cd63394e3475383b",
      "parents": [
        "6f3d0518f06dc0eb0fb40e03b4b35e840c81e95f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 22 15:10:45 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 01 10:42:55 2012 -0700"
      },
      "message": "Switch to libcorkscrew for native stack traces.\n\nThis is both for the current thread (which backtrace(3) could do) and other\nthreads, which is functionality we didn\u0027t have on x86 before.\nWe jump through the appropriate hoops to get static symbols as well as dynamic\nones.\n\nAlso unify the existing native stack dumpers so they can share the best code.\n\nExample x86 check failure:\n\n  *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***\n  Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) fault addr 0xdeadd00d\n  Registers:\n      eax: 0x00000000    ebx: 0x55a966f0    ecx: 0x55d523c0    edx: 0x09225a50\n      edi: 0x559d9b84    esi: 0xfffd8bcc    ebp: 0x55a9aba0    esp: 0xfffd8b90\n      eip: 0x558e2e98                    eflags: 0x00010246 [ PF ZF IF ]\n       cs: 0x00000023     ds: 0x0000002b     es: 0x0000002b     fs: 0x00000007\n       gs: 0x00000063     ss: 0x0000002b\n  Backtrace:\n  \t#00 unwind_backtrace_thread+536 [0x55d76bb8] (libcorkscrew.so)\n  \t#01 art::DumpNativeStack(std::ostream\u0026, int, char const*, bool)+79 [0x55924fcf] (libartd.so)\n  \t#02 art::HandleUnexpectedSignal(int, siginfo*, void*)+1431814659 [0x5597cc23] (libartd.so)\n  \t#03 __kernel_rt_sigreturn [0x55573410] ([vdso])\n  \t#04 art::Runtime::Abort()+600 [0x558e2e98] (libartd.so)\n  \t#05 art::LogMessage::~LogMessage()+1052 [0x5580c16c] (libartd.so)\n  \t#06 art::EnsureResolved(art::Class*)+336 [0x5570dad0] (libartd.so)\n  \t#07 art::ClassLinker::FindClass(char const*, art::ClassLoader const*)+144 [0x5571bc90] (libartd.so)\n  \t#08 art::ClassLinker::FindSystemClass(char const*)+43 [0x5572287b] (libartd.so)\n  \t#09 art::ClassLinker::FinishInit()+82 [0x557228d2] (libartd.so)\n  \t#10 art::ClassLinker::InitFromImage()+1469 [0x5572451d] (libartd.so)\n  \t#11 art::ClassLinker::CreateFromImage(art::InternTable*)+60 [0x5572583c] (libartd.so)\n  \t#12 art::Runtime::Init(std::vector\u003cstd::pair\u003cstd::string, void const*\u003e, std::allocator\u003cstd::pair\u003cstd::string, void const*\u003e \u003e \u003e const\u0026, bool)+943 [0x558e882f] (libartd.so)\n  \t#13 art::Runtime::Create(std::vector\u003cstd::pair\u003cstd::string, void const*\u003e, std::allocator\u003cstd::pair\u003cstd::string, void const*\u003e \u003e \u003e const\u0026, bool)+119 [0x558e9057] (libartd.so)\n  \t#14 art::Dex2Oat::CreateRuntime(std::vector\u003cstd::pair\u003cstd::string, void const*\u003e, std::allocator\u003cstd::pair\u003cstd::string, void const*\u003e \u003e \u003e\u0026, art::InstructionSet)+42 [0x80ac68a] (dex2oatd)\n  \t#15 art::Dex2Oat::Create(std::vector\u003cstd::pair\u003cstd::string, void const*\u003e, std::allocator\u003cstd::pair\u003cstd::string, void const*\u003e \u003e \u003e\u0026, art::InstructionSet, unsigned int, bool)+60 [0x80ac87c] (dex2oatd)\n  \t#16 art::dex2oat(int, char**)+3167 [0x80894cf] (dex2oatd)\n  \t#17 main+17 [0x8086a01] (dex2oatd)\n  \t#18 __libc_start_main+230 [0x55c12bd6] (libc-2.11.1.so)\n\nExample x86 SIGQUIT dump (note the three stacks, and note the absence of all\nthe crap that makes dalvik\u0027s attempt so unreadable):\n\n  \"Thread-10\" prio\u003d5 tid\u003d11 VmWait\n    | group\u003d\"main\" sCount\u003d1 dsCount\u003d0 obj\u003d0x612d6620 self\u003d0x884f8f0\n    | sysTid\u003d30512 nice\u003d0 sched\u003d0/0 cgrp\u003ddefault handle\u003d1458686832\n    | schedstat\u003d( 1249502 8995 26 ) utm\u003d0 stm\u003d0 core\u003d14 HZ\u003d100\n    | stackSize\u003d1044KB stack\u003d0x57905000-0x57906000\n    kernel: futex_wait_queue_me+0xcd/0x110\n    kernel: futex_wait+0x1e5/0x310\n    kernel: do_futex+0x101/0xb00\n    kernel: compat_sys_futex+0x75/0x160\n    kernel: sysenter_dispatch+0x7/0x2e\n    native: __kernel_vsyscall+14 [0x5557342e] ([vdso])\n    native: pthread_mutex_lock+54 [0x55cd8bf6] (libc-2.11.1.so)\n    native: art::Mutex::Lock()+86 [0x55823a86] (libartd.so)\n    at java.lang.AbstractStringBuilder.\u003cinit\u003e(AbstractStringBuilder.java:75)\n    at java.lang.StringBuilder.\u003cinit\u003e(StringBuilder.java:54)\n    at java.lang.Thread.create(Thread.java:427)\n    at java.lang.Thread.\u003cinit\u003e(Thread.java:223)\n    at ThreadStress$1.run(ThreadStress.java:134)\n\n(cherry picked from commit 00e446e5d912100b831fdcdbc276e7c31447f0c4)\n\nConflicts:\n\n\tsrc/thread.cc\n\nChange-Id: I4712f8235992eafe6d8d6f915aa96f684bceaff2\n"
    },
    {
      "commit": "6f29d0e6d5444ff84157c922c23c221567dcc6c5",
      "tree": "bd59a7c1006507d5d230876e703814191db9f0df",
      "parents": [
        "71e85b74eb5710a689e83623706b3bb372762eb5"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri May 11 15:50:29 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri May 11 16:51:58 2012 -0700"
      },
      "message": "Skip compilation of dead code from duplicate methods\n\nChange-Id: If6114b3cd8e9a2d9a901dc93c352cee6afa3361f\n"
    },
    {
      "commit": "e188419b971936086a188843378375f5ced13724",
      "tree": "176f45c1395b3efee8a6330512ee023960522797",
      "parents": [
        "90dc30f4b9967e850d0594e57dfa8e7cb0369575"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 23 12:38:15 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 23 12:38:15 2012 -0700"
      },
      "message": "Make Thread::InitStackHwm work on Mac OS.\n\nChange-Id: Id0170dbdff8112d8e48d41ab50a311076863151e\n"
    },
    {
      "commit": "795e33081c73a6fead31f45b03fdfb022ef7eab8",
      "tree": "6e7c5d4ac9bd9dfc04c9bb271538b829c69e62f5",
      "parents": [
        "5b04728e9a61cf038e38820eb8a82a412015d5e3"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Apr 21 00:20:57 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Apr 21 00:40:10 2012 -0700"
      },
      "message": "Set materialized file names correctly.\n\nChange-Id: I0848ad4da4f2033dd7804686e65bd44c690a2036\n"
    }
  ],
  "next": "c967f78cd29b6019f7cfca40a02e9b677112da70"
}
