)]}'
{
  "log": [
    {
      "commit": "d3c59658faf9aaeb49cf63d928cead324f14bd8a",
      "tree": "be4d1b19e228bf2dcaacc1b3adea220d1831e981",
      "parents": [
        "f808e8a0cc218c2b98023ef0e91f3c5b74ad2962"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 17 09:35:04 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 17 10:48:33 2016 +0000"
      },
      "message": "Check GetDumpNativeStackOnSigQuit() for daemons.\n\nThe flag is passed by run-test to avoid libunwind crash flakiness,\nso we should check it when dumping threads.\n\nChange-Id: I3a3fcfd80ab254a315d58d629c81161fea9900dc\n"
    },
    {
      "commit": "8d1594da6e97cd11580baf30ee4b75d4e7e2616a",
      "tree": "05edaae53f26cde16f913eeab7020f9006dd20db",
      "parents": [
        "b7f257f353b1eb2db2732939a0404c118316891d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 01 14:38:37 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 10 19:09:54 2016 -0800"
      },
      "message": "ART: Allow unwinding unattached threads\n\nPartial revert of commit ed8b723c5f3989d2593ec21c65c96d6d8bf25579.\n\nMake it (constexpr) configurable whether we allow unwinding native\nstacks of unattached threads.\n\nBug: 27449879\n\nChange-Id: I307a80c9a0166f33fa8a41e492d7eb0d77d0e44f\n"
    },
    {
      "commit": "47c1959f0c78eaf6ab17e1b80fa3ce9643e55849",
      "tree": "d4d8da4b1e24ae86e89801d6b77dbfa4c3a53d11",
      "parents": [
        "bcd9dd7d1223eaa60f188d1a109d26e5e0143e10"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 07 11:59:01 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 07 13:14:53 2016 -0800"
      },
      "message": "Increase kDumpWaitTimeout 10x for target builds\n\nNew timeout is 100s, the old one was occasionally hit by overloaded\ndevice. This caused a confusing crash in the barrier destructor\nsince not all the threads had went through the barrier yet.\n\nBug: 27334917\n\n(cherry picked from commit 74bdab0b14c592053ff71654ab51a0f116114a42)\n\nChange-Id: I24cf6eb6858ad93a47446aa6bbc18942a71b191e\n"
    },
    {
      "commit": "32ce2adefb8a3d0eda59a29f5e87c1eb43eef796",
      "tree": "50aaa40b31ede355359765259edc7989485cc7d5",
      "parents": [
        "c71dc3852edfa8e0cd2083d12845ff8607e189ff"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 04 14:58:03 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 04 18:37:19 2016 -0800"
      },
      "message": "Add more systracing everywhere\n\nAdded to:\nJIT\nDexFile functions\nOat file manager\n\nAdded helper ScopedTrace to prevent errors and reduce excess code.\n\nBug: 27502458\n\n(cherry picked from commit dabdc0fe183d4684f3cf4d70cb09d318cff81b42)\n\nChange-Id: Ifaeff8913d79eefc797380987d13cc00456266f8\n"
    },
    {
      "commit": "0c659394d1ee74d28157c42656b31ea48cb54f8b",
      "tree": "ed0a002d71f059a87957b851b710554b4ed2b561",
      "parents": [
        "f7286721a51c772b2abb42fef5bc0d2548df2372"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 02 10:27:01 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 02 10:27:01 2016 +0000"
      },
      "message": "Revert \"ART: Allow unwinding unattached threads\"\n\nThis reverts commit f7286721a51c772b2abb42fef5bc0d2548df2372.\n\nChange-Id: I6c96ece063041e94d40a96bdd054f89cd7875ade\n"
    },
    {
      "commit": "f7286721a51c772b2abb42fef5bc0d2548df2372",
      "tree": "6fbcc9b506928dc77300b7e3a60c1abc6b6a4604",
      "parents": [
        "73e31f8ae826be5b9b0c3c216abb904cbfa71077"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 01 14:38:37 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 01 14:38:37 2016 -0800"
      },
      "message": "ART: Allow unwinding unattached threads\n\nPartial revert of commit ed8b723c5f3989d2593ec21c65c96d6d8bf25579.\n\nMake it (constexpr) configurable whether we allow unwinding native\nstacks of unattached threads.\n\nChange-Id: Ibb1fd0956fb796583f78ec9c3a74521f6fbe96d9\n"
    },
    {
      "commit": "a73280df8cac1279b6dea0424722f42ef0048613",
      "tree": "22adc28cc88bc440b8e28a13a389c3a3c2b22341",
      "parents": [
        "47a2a45a6673ddf3322115ff5058763f82a9368f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 15 13:05:16 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 15 16:24:56 2016 +0000"
      },
      "message": "Add an option to disable native stack dumping on SIGQUIT.\n\nSome of our (stress) run-tests do ANR dumping, which end up\nstressing libunwind, that has known problems. To avoid getting\nflakes due to libunwind, disable native stack dumping on SIGQUIT\nfor our run-tests.\n\nbug:27185632\nbug:24664297\nChange-Id: I69085e48db903d6240448d71666ae2dcd091922e\n"
    },
    {
      "commit": "fbc31087932a65e036a153afab3049dc5298656a",
      "tree": "c728b9039a71db3be9cae888ad5e1afc31f34a13",
      "parents": [
        "c7f4e3a5aeaa23342b4e03b0d751f60ac5c5815c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Jan 24 11:59:56 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jan 25 14:22:15 2016 -0800"
      },
      "message": "Revert \"Revert \"Load app images\"\"\n\nThis reverts commit 1bc977cf2f8199311a97f2ba9431a184540e3e9c.\n\nBug: 22858531\n\nChange-Id: Ide00bf3a73a02cba3bb364177204ad1b13f70295\n"
    },
    {
      "commit": "1bc977cf2f8199311a97f2ba9431a184540e3e9c",
      "tree": "580a02752d8e447f6dce7cce01386c7e2a9a87f4",
      "parents": [
        "f7fd970244f143b1abb956e29794c446e4d57f46"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jan 23 14:15:49 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jan 23 14:15:49 2016 +0000"
      },
      "message": "Revert \"Load app images\"\n\nFails when a method is duplicated (see test 097-duplicate-method)\n\nBug: 22858531\n\nThis reverts commit f7fd970244f143b1abb956e29794c446e4d57f46.\n\nChange-Id: Ib30ae5be00cc568e799290be6b3c8f29cbbe4c20\n"
    },
    {
      "commit": "f7fd970244f143b1abb956e29794c446e4d57f46",
      "tree": "aac1f57ac70747957f609bb46305dfeca87645a1",
      "parents": [
        "95005291d8ebdd1d2ac58ffc5181fef4fbbf2383"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 09 11:16:49 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 22 15:01:55 2016 -0800"
      },
      "message": "Load app images\n\nSupport in-place patching of the app image based on boot image\nlocation and app oat location. Only loads for art run test so far\nsince we do not automatically generate app images for app installs.\n\nN5 maps launch time (~200 runs):\nBefore: 930ms\nAfter: 878.18ms\nAfter + image class table: 864.57ms\n\nTODO:\nOatdump support.\nStore class loaders as class roots in image.\n\nBug: 22858531\n\nChange-Id: I9cbc645645e62ea2ed1ad8e139e91af7d88514c1\n"
    },
    {
      "commit": "59a8c0bb74c353f879760bd6522b49cf7298666e",
      "tree": "b899a8d9e4dcb19023b7754255833cf710180140",
      "parents": [
        "0021c310e2e613d6d180acda0d9d422dba8688b0"
      ],
      "author": {
        "name": "tony.ys_liu",
        "email": "tony.ys_liu@htc.com",
        "time": "Wed Jan 20 18:05:31 2016 +0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 20 15:38:12 2016 -0800"
      },
      "message": "Use current pid not tid to create a backtrace map.\n\nThe BacktraceMap::Create() function assumes that the passed in\nparameter is the current pid not tid. If a tid is passed in, then\nthe logic that creates the local map in libunwind is not used\nand can bypass all of the special handling of local maps. The result\ncan be crashes if this map data gets out of sync with the real maps\nfound in the process.\n\nBug: 26676205\nBug: https://code.google.com/p/android/issues/detail?id\u003d199219\nChange-Id: Ibab9f7a7b99648a2cdaa185958bf6ffc368079ce\n"
    },
    {
      "commit": "62597d1dc4e62d36addcc2f1c452cbd6f565a420",
      "tree": "01ab6184c9febdbdf5fbfd1ed33e4469aaf56974",
      "parents": [
        "c3ba07ef76549129705af28173070b88a1c39531"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jan 11 10:19:06 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 12 09:56:18 2016 -0800"
      },
      "message": "Add sleep in SuspendAllDaemonThreadsForShutdown\n\nOnly sleep if there are still daemon threads. Since we have already\nshutdown the runtime daemons, this is a rare case. The goal of the\nsleep is to leave daemon threads time to become blocked in a place\nwhere they ideally will not touch runtime state.\n\nBug: 26483935\nBug: 18577101\n\nChange-Id: Iad12209e771720523620e0a3829a75ec4647f58b\n"
    },
    {
      "commit": "ba098bafdc4bd6dc6fc85f2996fa9f2d9be051bf",
      "tree": "bed1fcab1495ffb11383178bcf3b90a48b30bfd0",
      "parents": [
        "66521058c80ee4058995d28f512dd6d173610e3a"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 07 09:31:33 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 08 16:28:46 2016 -0800"
      },
      "message": "Revert \"Revert \"Reduce sleep duration in SuspendAllDaemonThreads\"\"\n\nFixed the error where I reduced the time until the warning by 10x.\n\nBug: 26351700\n\nThis reverts commit bc34a7ed232cb3d384c250578e2b4ede45f2b167.\n\nChange-Id: I6b30a0711fe077421665b78c39ded88899407700\n"
    },
    {
      "commit": "4d87df607a0b86cdf4b2c04f61d72a60d8975ce0",
      "tree": "922e882c15633e6c700091c99864868d69822d7d",
      "parents": [
        "97f2ca08c3d9a2b1694419aea07cd64f477c0af2"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 07 15:14:19 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 08 15:46:52 2016 -0800"
      },
      "message": "Improve handling of daemon threads after runtime shutdown\n\nThe main issue comes from the fact that user daemon threads are\nallowed to continue running after the runtime has shutdown. They may\nstill have a JNI env pointer. To prevent crashing if they call into\nthe env, we replace the function pointers with functions that sleep\nforever.\n\nThe other issue is that user daemon threads that are blocked in an\nART condition variable may get woken up by another user daemon inside\nof Monitor::Notify or by a spurious wakeup (i.e. SIGQUIT). To deal\nwith this issue, we check the JNI env for shutdown runtime when we\nare woken up from a condition variable wait. This check fixes test\n132 with --host --gdb --interpreter. Previously this test crashed\nsince dlclose was somehow causing a spurious futex wakeup.\n\nTODO: Investigate adding a unit test.\n\nBug: 18577101\nChange-Id: I479b38968ee9fbc4ee4b252ee2528787279972cc\n"
    },
    {
      "commit": "bc34a7ed232cb3d384c250578e2b4ede45f2b167",
      "tree": "53c9810ed6449e4bc00472e47751e104c8cdf6ad",
      "parents": [
        "adef5bde6c3392dca3dafa0f8d2c9428b59af3ef"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 07 09:13:24 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 07 09:13:24 2016 +0000"
      },
      "message": "Revert \"Reduce sleep duration in SuspendAllDaemonThreads\"\n\nrun-test 132 randomly chokes due to this change.\n\nBug: 26351700\n\nThis reverts commit adef5bde6c3392dca3dafa0f8d2c9428b59af3ef.\n\nChange-Id: I18e007264e1e8b9027d7d241cb9f0053ad8d112a\n"
    },
    {
      "commit": "adef5bde6c3392dca3dafa0f8d2c9428b59af3ef",
      "tree": "f22a1f22858b6cabd49d5d1368d00e1468c4d0fe",
      "parents": [
        "b94a8906b82ed05ccf67be68d9d329b85c514d46"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 06 18:28:21 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 06 18:38:17 2016 -0800"
      },
      "message": "Reduce sleep duration in SuspendAllDaemonThreads\n\nPreviously we unconditionally slept for 200ms which caused runtime\nshutdown to take 200ms longer than required.\n\nReduces runtime shutdown time for \"am\" from ~200ms to ~10ms.\n\nBug: 26351700\nChange-Id: I7fd0059cb3b04dba0acc4a1754e76c89ec867f85\n"
    },
    {
      "commit": "fb6db4c841e928feb35a985923fe2d41848f8f31",
      "tree": "59130aec4e26c0ca42aac3f800ef6bef85550cd8",
      "parents": [
        "5af190cb6f11a651afe0f0abc5ba0844246970d6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 06 17:23:25 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 06 18:20:05 2016 -0800"
      },
      "message": "Add systrace output to runtime shutdown\n\nHelp debug why am command shutdown is slow.\n\nFindings:\n~200ms spent in deleting thread list on N5.\n\nBug: 26351700\nChange-Id: Icb59390a5267ae8bade4ced12252743c48206bb1\n"
    },
    {
      "commit": "9450c6c25833e8353e436bbd0491ed96cd80f34f",
      "tree": "163416d7a0e31dccf918ac0e0ddcf11b4df5075a",
      "parents": [
        "2264f624e41acf09b17c3961bd52966e43f2b58f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Nov 07 11:55:23 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Nov 07 12:04:08 2015 -0800"
      },
      "message": "Remove thread suspension assertion for SuspendAllForDebugger\n\nFixes race condition that occasionally caused an assertion failure\nfor debugger tests, description in comments.\n\nChange-Id: I18e003e01c1711dfdb0dd68ccb3d2b7dc626991f\n"
    },
    {
      "commit": "62623401fe994ff2f2719faf3cdb3c23b92ccd96",
      "tree": "7ecf11ececadb2b541f06620af2db01b9a90f2f0",
      "parents": [
        "43c6d31c43c05d97511bb9658964fd3d2f32b915"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 28 19:15:05 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 03 10:26:03 2015 +0000"
      },
      "message": "Fix deadlock with the JIT code cache.\n\nAlso remove hack done for ThreadStress.\n\nChange-Id: Ie25c3bca08d9f2b8919706fa3fc26c5ab213f4a3\n"
    },
    {
      "commit": "b56200b014d6bcfb962dc7afdd8b5f7168043ae7",
      "tree": "bca1d7a9d88f8f847ddaccb3f95da6c5f1ca7f84",
      "parents": [
        "0b654bce0f8d7c596d4115848b7e4c4dbeadafd5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 29 10:41:51 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 29 12:00:01 2015 -0700"
      },
      "message": "Add comment for RunCheckpoint and clean up ThreadList a bit\n\nChange-Id: Id512bfd15fee9a7359c77f094e16d64634943619\n"
    },
    {
      "commit": "10d2508b105427ef1bcaf0c222873bae7acc66d3",
      "tree": "8aa018dd07a1d84daf9f44ea7bb1c02442c44097",
      "parents": [
        "5f2e628b280dfc5f8385e489d44cc0960fcea484"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 28 18:36:09 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 28 19:24:54 2015 -0700"
      },
      "message": "Change Checkpoint API to return total number of checkpoints\n\nFixes a race condition with SetStateUnsafe that caused some\nwarnings in the Barrier::~Barrier.\n\nThe race was:\nRunCheckpoint sees suspended thread, runs the checkpoint. Inside the\ncheckpoint, the thread state had changed to runnable by\nSetStateUnsafe. This occasionally caused more Barrier::Pass than\nexpected.\n\nThe fix is to return the total number of checkpoints instead of just\nthe runnable ones.\n\nBug: 24191051\nChange-Id: If15a933ed4c8efa66a5f27cd5feaa2e5957ae804\n"
    },
    {
      "commit": "6cff48f05894a60aa4742472983a75504536ca15",
      "tree": "bd399d46ef08cd836010f3119c8c5db054561267",
      "parents": [
        "823e693aa946ba75cd047429e1290011a2ed8729"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Sun Jan 26 21:36:13 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 23 11:16:11 2015 -0700"
      },
      "message": "ART: Speed up thread stack tracing for ANRs\n\nShare a BacktraceMap for all threads being dumped, which speeds up\nANR dumping. Results from Nexus 9 (average of five):\n\nBefore: 0.587s\nAfter:  0.206s\n\nChange-Id: Ia70e0dbd39049318c02de561e7b95258d4849467\n"
    },
    {
      "commit": "4f55e22630d99ca0edd9e951e5ee96b57bb9b980",
      "tree": "84b7d55a6a7c31c09ed2865cc1bc2f4393476533",
      "parents": [
        "2d06e08d25bbf8eff1de945736a60810009e59ad"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 04 13:26:21 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 11 13:14:20 2015 -0700"
      },
      "message": "Add and use ScopedSuspendAll\n\nUsage replaces most SuspendAll and ResumeAll calls.\n\nChange-Id: I355683a5365876242cea85a656dcb58455f7a294\n"
    },
    {
      "commit": "00370827646cc21cb370c3e7e93f9c0cff4c30c2",
      "tree": "79fd9e7d08ad2055542cb1b64ebf26b00cb3af17",
      "parents": [
        "83f8b5bb9e9c52791a02a84d7b0889cab898efe4"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Aug 18 14:47:25 2015 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Aug 19 12:15:17 2015 -0700"
      },
      "message": "Use thread-local is_gc_marking flags for the CC collector.\n\nThe currently global is_marking flag is used to check if the read\nbarrier slow path needs to be taken for GC roots access. Changing it\nto a thread-local flag simplifies the fast path check and makes it\neasier to do it in assembly code. It also solves the issue that we\nneed to avoid accessing the global flag during startup before the heap\nor the collector object isn\u0027t allocated and initialized.\n\nBug: 12687968\nChange-Id: Ibf0dca12f400bf3490188b12dfe96c7de30583e0\n"
    },
    {
      "commit": "511683764f2580d877725e20514ca4976c91bbfb",
      "tree": "e9a5fa23a95c87cb655affd4249177467ae9dbf5",
      "parents": [
        "b923298c9b6e47b4110dd0cb23cb6a4e98b8552b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 12 16:40:32 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 12 18:28:59 2015 -0700"
      },
      "message": "Wait for GC to finish in ThreadList::~ThreadList\n\nAdded a DisableGC to the heap instead of using the runtime shutdown\nboolean. The runtime shutting down boolean is set to true before the\nnon daemon threads have exited. These threads may still be doing\nallocations and we don\u0027t want to throw OOME if unnecessary.\n\nBug: 18577101\nChange-Id: Iceb7048e6bd799aa2716099459c54f8dc0fb8feb\n"
    },
    {
      "commit": "4382f1ef6ab2d6992d330cc8b43057d9139a1243",
      "tree": "dbea9b43e11a0253a1eae59b1a6db21c5cd6d9ea",
      "parents": [
        "1cf85515600d298a2c9e4de137c0926949205097"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 05 01:08:53 2015 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 04 19:11:29 2015 -0700"
      },
      "message": "Revert \"Revert \"ART: Use bionic TLS slot for thread-self\"\"\n\nThis reverts commit 50832b6804d15ea5ddfe99a2753a09111b5bfe37.\n\nFix clearing the TLS on detach.\n\nChange-Id: I75ed5ccccb4f31800e5f893055e96067a9695258\n"
    },
    {
      "commit": "b19ccb1d88f0bff7371c9b72f265148677c18e95",
      "tree": "6c8bc31d98bf60c4abd13b538f0acc2556cf63b7",
      "parents": [
        "5c03f3698f5e2e0d762e2e15ec00310b6cdab4fe"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 15 10:24:16 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 15 10:46:49 2015 -0700"
      },
      "message": "Use SuspendAllInternal for FlipThreadRoots\n\nFix FlipThreadRoots to wait until all the threads are suspended by\nusing SuspendAllInternal. Since running threads no longer hold the\nmutator lock as shared held, doing an exclusive lock will not block\nif the threads are not suspended. Also implemented MarkHeapReference\nwhich is used to preserve soft references.\n\nFixes CC tests.\n\nChange-Id: I4b059238f4249cf297e21ae918becd029fe26527\n"
    },
    {
      "commit": "19af117525f37607fc866e3375ef1450e3f5ae35",
      "tree": "87cbf456013cd2b6b1151ce0c8f9116c461f1b67",
      "parents": [
        "d1665b7a689086ec5b33a69a05313c46ea1a95e4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 14 10:05:45 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 14 10:05:45 2015 -0700"
      },
      "message": "Fix mac build\n\nUntested.\n\nChange-Id: I1b7803f2fdcd7f509614aa9d3dce414e50a6119d\n"
    },
    {
      "commit": "c6f3439b67962584cfb764133e192c3317f0e1fc",
      "tree": "58f31ef9ed7155cd386f139be230383d943a1c72",
      "parents": [
        "e978aba24094cce90453ad3294b8c4536ee8e4b4",
        "eac4424b3420c280f97ff2f815b5dedd8dac9801"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 14 01:47:39 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 14 01:47:39 2015 +0000"
      },
      "message": "Merge \"ART: JNI thread state transition optimization\""
    },
    {
      "commit": "eac4424b3420c280f97ff2f815b5dedd8dac9801",
      "tree": "4e7c31b4312aa000bd3d2250df6a05daf61523d7",
      "parents": [
        "ec97825f8553b3a99b6dfbbb90a50fe65301ea94"
      ],
      "author": {
        "name": "Yu Li",
        "email": "yu.l.li@intel.com",
        "time": "Mon Jun 29 10:50:03 2015 +0800"
      },
      "committer": {
        "name": "Man Cao",
        "email": "manc@google.com",
        "time": "Mon Jul 13 15:56:19 2015 -0700"
      },
      "message": "ART: JNI thread state transition optimization\n\nThis patch improves the JNI performance by removing the explicit acquiring and\nreleasing the mutator lock when a thread state transits between suspended and\nrunnable states.\n\nThe functions responsible for changing the state were found to be the costliest\npart of the JNI. Originally, a thread needs to acquire a shared mutator lock by\na CAS instruction when entering the runnable state and also needs to release\nthe lock by a CAS when entering the native state from runnable. This patch\nremoves these CAS operations when a thread state transits between suspended and\nrunnable. A thread in the runnable state is considered to have shared ownership\nof the mutator lock and therefore transitions in and out of the runnable state\nhave associated implication on the mutator lock ownership. Meanwhile, a barrier\nis added to control suspending all threads from running.\n\nJNI transition overhead was reduced by 25% on IA platform and by 17% on ARM\nplatform by this patch, while it has little impact on GC pause time (measured\nwith \"suspend all histogram\").\n\nChange-Id: Icee95d8ffff1bbfc95309a41cc48836536fec689\nSigned-off-by: Yu, Li \u003cyu.l.li@intel.com\u003e\nSigned-off-by: Haitao, Feng \u003chaitao.feng@intel.com\u003e\nSigned-off-by: Lei, Li \u003clei.l.li@intel.com\u003e\n"
    },
    {
      "commit": "5b1eea0a6c90e6e82393cdb7337f0c2bb05637d9",
      "tree": "3b8bddd878f07ee418a83a09f229ea44f2a20a05",
      "parents": [
        "24db1bc55bf8fb3240690436a229352453ae75e1",
        "0b71357fb52be9bb06d35396a3042b4381b01041"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jul 13 22:51:39 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 13 22:51:40 2015 +0000"
      },
      "message": "Merge \"Thread-local mark stacks for the CC collector.\""
    },
    {
      "commit": "0b71357fb52be9bb06d35396a3042b4381b01041",
      "tree": "44b8d6b0ca4a71f33cda55068fa9e14864c55625",
      "parents": [
        "0e87d1809443d41b431ce3a686b4e074df2d7b8b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Jun 16 18:29:23 2015 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jul 13 15:50:20 2015 -0700"
      },
      "message": "Thread-local mark stacks for the CC collector.\n\nThread-local mark stacks are assigned to mutators where they push\nreferences in read barriers to reduce the (CAS) synchronization cost\nin a global mark stack/queue.\n\nWe step through three mark stack modes (thread-local, shared,\nGC-exclusive) and use per-thread flags to disable/enable system weak\naccesses (only for the CC collector) instead of the existing global\none to safely perform the marking phase. The reasons are 1)\nthread-local mark stacks for mutators need to be revoked using a\ncheckpoint to avoid races (incorrectly leaving a reference on mark\nstacks) when terminating marking, and 2) we can’t use a checkpoint\nwhile system weak accesses are disabled (or a deadlock would\nhappen). More details are described in the code comments.\n\nPerformance improvements in Ritzperf EAAC: a ~2.8% improvement\n(13290-\u003e12918) in run time and a ~23% improvement (51.6s-\u003e39.8s) in\nthe total GC time on N5.\n\nBug: 12687968\nChange-Id: I5d234d7e48bf115cd773d38bdb62ad24ce9116c7\n"
    },
    {
      "commit": "3cf225386e8129dcbe32b289279ecb87ec255318",
      "tree": "53690ffa8c39d650bbb95a974e2ea777ef689320",
      "parents": [
        "a51df8a59f2be2c797a98fb60c6eca9b049412bf"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 09 15:15:09 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 09 16:27:43 2015 -0700"
      },
      "message": "Clean up some includes\n\nChange-Id: Ia03a3b54b235df38d5cfe096fef1aebe2b80eb29\n"
    },
    {
      "commit": "cbc5064ff05179b97b416f00ca579c55e38cd7d9",
      "tree": "9ce221e6644ff770b8484ba8cb5581e538b88eef",
      "parents": [
        "864a2d955aa85ab989c86d7f1eeacbe0b11f8b0f"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jun 01 17:33:12 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 10 09:35:08 2015 +0200"
      },
      "message": "JDWP: asynchronous invoke command handling\n\nThe JDWP thread used to wait for the result of a method invocation\nrunning in an event thread. But doing that prevents the JDWP thread\nfrom processing incoming commands from the debugger if the event\nthread gets suspended by a debug event occurring in another thread.\nIn Android Studio (or another IDE), this leads to the debugger being\nblocked (with the famous message \"Waiting until last debugger command\ncompletes\" of Android Studio / IntelliJ) because it is actually\nwaiting for the reply of its latest command while the JDWP thread\ncannot process it.\n\nThis CL changes the way invoke commands (ClassType.InvokeCommand,\nClassType.NewInstance and ObjectReference.InvokeCommand) are handled\nin the ART runtime.\nThe JDWP thread no longer waits for the event thread to complete the\nmethod invocation. It now simply waits for the next JDWP command to\nprocess. This means it does not send any reply for invoke commands,\nexcept if the information given by the debugger is wrong. In this\ncase, it still sends a reply with the appropriate error code.\nThe event thread is now responsible for sending the reply (containing\nthe result and the exception object of the invoked method) before\ngoing back to the suspended state.\n\nIn other words, we add special handling for invoke commands so they\nare handled asynchronously while other commands remained handled\nsynchronously. In the future, we may want to handle all commands\nasynchronously (using a queue of reply/event for instance) to remove\nthe special handling code this CL is adding.\n\nNow the JDWP thread can process commands while a thread is invoking\na method, it is possible for the debugger to detach (by sending a\nVirtualMachine.Dispose command) before the invocation completes. In\nthat situation, we must not suspend threads again (including the\nevent thread that executed the method) because they would all remain\nsuspended forever.\n\nAlso minor cleanup of the use of JDWP constants and update comments.\n\nBug: 21515842\nBug: 18899981\nChange-Id: I15e00fb068340f3d69dc9225d8d2065246e68c58\n"
    },
    {
      "commit": "bf44d42d978861f33fd5978f49392db3321ae414",
      "tree": "9026c1e27e713bebc3d23139dfb0263ca3435ba1",
      "parents": [
        "35d62ce1801aad45233ae72c1bd665f8709e4a6d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 02 11:42:18 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 02 17:51:53 2015 -0700"
      },
      "message": "Add a way to SuspendAll for a long duration\n\nHprof uses this mode to not cause thread suspend timeouts if GC tries\nwhile the hprof dump is running.\n\n(cherry picked from commit 77be6635f9b07a8a794924c5fb9b071949776a6d)\n\nBug: 21063989\nChange-Id: Ic6304620afd1489719a7e0e4299f829c90fe27cc\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": "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": "bb87e0f1a52de656bc77cb01cb887e51a0e5198b",
      "tree": "113f014c6e20fab3e936a3ac05f9f738639541f6",
      "parents": [
        "e57fc0f0260fcb1d08cbb720ec95c04c0f394b91"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 03 11:21:55 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 06 10:44:37 2015 -0700"
      },
      "message": "Refactor and improve GC root handling\n\nChanged GcRoot to use compressed references. Changed root visiting to\nuse virtual functions instead of function pointers. Changed root visting\ninterface to be an array of roots instead of a single root at a time.\nAdded buffered root marking helper to avoid dispatch overhead.\n\nRoot marking seems a bit faster on EvaluateAndApplyChanges due to batch\nmarking. Pause times unaffected.\n\nMips64 is untested but might work, maybe.\n\nBefore:\nMarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us\n\nAfter:\nMarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us\n\nBug: 19264997\n\nChange-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca\n"
    },
    {
      "commit": "bf9fc581e8870faddbd320a935f9a627da724c48",
      "tree": "0a4a6c21fbd4c771b06fac186d32efa6722605b2",
      "parents": [
        "3d96846b6adedf57be64eb3873de0ca58ec4b827"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 13 17:21:25 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 13 17:32:48 2015 -0700"
      },
      "message": "Add more info to who called SuspendAll\n\nHelps diagnose related jank.\n\nChange-Id: I38191cdda723c6f0355d0197c494a3dff2b6653c\n"
    },
    {
      "commit": "1558b577907b613864e98f05862543557263e864",
      "tree": "5498d8d15f198341fe46a8badc7e7591611a09b5",
      "parents": [
        "2cfdabd2bb4833d7092819d27ef08a9e1cdffead"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Feb 25 15:05:59 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Mar 09 15:19:49 2015 +0100"
      },
      "message": "JDWP: allocate DebugInvokeReq only when requested\n\nOnly allocates thread-local DebugInvokeReq when the debugger requests\na thread to invoke a method. The JDWP thread allocates that structure\nthen attaches it to the target thread. When the thread is resumed, it\nexecutes the method. Once the invocation completes, the thread\ndetaches the DebugInvokeReq, signals the JDWP thread then suspends.\nFinally, the JDWP thread wakes up, prepares the reply with the invoke\nresult (or exception) and deallocates the DebugInvokeReq.\n\nAlso ensures GC safety for object returned by the invoke. We add the\nobject to the JDWP object registry right after the invoke. We now\nreference that object with a JDWP ObjectID instead of an Object* in\nthe DebugInvokeReq struct. This prevent from accessing a stale\nreference if the GC runs and moves the Object*.\n\nThis CL includes the following changes:\n- Move former DebugInvokeReq::ready flag to\n  Thread::tls_32bit_sized_values::ready_for_debug_invoke. It\u0027s needed\n  to know whether a thread has been suspended by an event, thus ready\n  to invoke a method from the debugger.\n- Remove DebugInvokeReq::invoke_needed: we now test if we attached a\n  DebugInvokeReq* to the thread.\n- Rename misleading FinishMethod function to RequestMethod.\n\nBug: 19142632\nBug: 18166750\nChange-Id: I351fb4eb94bfe69fcafb544d21d55ff35a033000\n"
    },
    {
      "commit": "ff3ef43f3d0f0986fe23286af028b352277b6e1e",
      "tree": "ee9d98ce4598eb664de307d54233896979025d40",
      "parents": [
        "5e42cd3eee2c89214a331a36fe226cfcc57917a3",
        "e15ea086439b41a805d164d2beb07b4ba96aaa97"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Mar 04 01:37:11 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 04 01:37:11 2015 +0000"
      },
      "message": "Merge \"Reserve bits in the lock word for read barriers.\""
    },
    {
      "commit": "e15ea086439b41a805d164d2beb07b4ba96aaa97",
      "tree": "465ee3780acd8b7cb35c8a7f42a1f3c5df3d26ec",
      "parents": [
        "0b25c71ac93fb10c484dbacb9e23db505a8e2353"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Feb 09 17:11:42 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Mar 03 17:33:18 2015 -0800"
      },
      "message": "Reserve bits in the lock word for read barriers.\n\nThis prepares for the CC collector to use the standard object header\nmodel by storing the read barrier state in the lock word.\n\nBug: 19355854\nBug: 12687968\nChange-Id: Ia7585662dd2cebf0479a3e74f734afe5059fb70f\n"
    },
    {
      "commit": "91e56692c6bd9fa1d41951ee7dc311f19461f4be",
      "tree": "8e7600204eed1509b7ec436ae789f3d8195a8755",
      "parents": [
        "dc47e986941b1a3754447fabea272485f3f0f382"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 03 13:51:04 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 03 16:31:49 2015 -0800"
      },
      "message": "Wait for threads to finish unregistering\n\nThere was a race where Thread::join would return before the thread was\nunregistered. This caused a problem with Daemons.stop since the thread\nlist could get deleted before the daemon thread was removed from list_.\nThis caused occasional \"Request to unregister unattached thread\"\nerrors and warnings.\n\nThe fix is to wait until threads finish registering before destroying\nthe thread list. The only threads which can be unregistering at this\npoint are the daemons we stopped earlier during the runtime shutdown\nprocess. The issue is that thread join finishes before we remove the\nthread from the thread list.\n\nAlso some cleanup.\n\nBug: 18713034\nChange-Id: I8921122fe8462643a6b814b5f00632481e3831fb\n"
    },
    {
      "commit": "9db831acffa509b2e46c1d63fe25650d3bedd415",
      "tree": "35480ba75101381a6e6648d267c485353a94c809",
      "parents": [
        "510be430dc4e68c09b56e5636e97a76380927e1d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 17:20:30 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 17:21:24 2015 -0800"
      },
      "message": "Print thread name for attempting to unregister unattached thread\n\nBug: 18713034\nChange-Id: Ic0654c6569277e5bbd6d2582140595faaa36cded\n"
    },
    {
      "commit": "794ad76e8d5b5b9132819d5b08a0570e27615644",
      "tree": "74b420e4337ecf9e5df689cc376fa965d765a908",
      "parents": [
        "d98ff78976696fdde1e7868d4687719a0439544b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 23 08:12:24 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 23 10:23:06 2015 -0800"
      },
      "message": "ART: Introduce NO_RETURN, Mark DoLongJump noreturn\n\nAdd NO_RETURN macro that adds C++11 noreturn attribute. Mark\nDoLongJump methods as noreturn.\n\nChange-Id: Ifde4318e370493237050d4c1349285a0382df23f\n"
    },
    {
      "commit": "3a958aac75ec491a71fba4a9ec345cdd1817708c",
      "tree": "b34b01a353a23a1ddf9a8b8115406968e00952b8",
      "parents": [
        "7d3186247cd382c4f7cf8093961795e8565b00e0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Feb 04 12:52:34 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Feb 04 12:53:29 2015 -0800"
      },
      "message": "Fix incorrect static const\n\nBug: 19265183\nChange-Id: I573df60fe90952246d2126ced010f2bdac006bca\n"
    },
    {
      "commit": "c470aefe5abb9ab0b209c7c99139734efe97b177",
      "tree": "9789ee3c9969d2068966c7a3db82b29fd8fa1df0",
      "parents": [
        "a4ddb5493e2426488074cfeccf1b1e779d5385ee",
        "991438608d5223128a199282b85418f08c471b35"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Feb 04 19:07:24 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 04 19:07:27 2015 +0000"
      },
      "message": "Merge \"Fix occasional long ThreadSuspendSleep\""
    },
    {
      "commit": "991438608d5223128a199282b85418f08c471b35",
      "tree": "77fd7e5339baabe058e5958bd4a10cf847040643",
      "parents": [
        "900e7b36057410cb12cc3c1a066dca04db3c2d45"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 03 14:26:46 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 03 18:50:26 2015 -0800"
      },
      "message": "Fix occasional long ThreadSuspendSleep\n\nSince usleep can wait much longer than the specified us, we use\nsched_yield instead for more predictable behavior.\n\nBug: 18379850\nChange-Id: I729212251db1e86e470240b7a042bbf2d4e981cd\n"
    },
    {
      "commit": "dd9943d4466b052ef6c5ee5b32187adb48cbce74",
      "tree": "ea1651e8990706b62e9d1375f635c6ec5d6066fd",
      "parents": [
        "28acb6feb50951645c37c077bd3897ea760ca322"
      ],
      "author": {
        "name": "Lei Li",
        "email": "lei.l.li@intel.com",
        "time": "Mon Feb 02 14:24:44 2015 +0800"
      },
      "committer": {
        "name": "Haitao Feng",
        "email": "haitao.feng@intel.com",
        "time": "Tue Feb 03 17:48:45 2015 +0800"
      },
      "message": "ART: checkpoint mechanism optimization\n\nGC thread and trim thread are both using checkpoint mechanism. GC thread\nwill request java threads to mark their thread roots by themselves. Trim\nthread will request java threads to trim their jni local reference\ntables by themselves.\n\nThe checkpint mechanism semantics is that the runnable java threads will\nrun checkpoint function itself at safepoint, and finally the java\nthreads and gc thread or trim thread is synchronized via barrier. If the\njava threads are not runnable, gc thread or trim thread will suspend\nthem and then run their checkpoint functions one by one on behalf of\nthem. If all the java threads are not runnable, then gc thread or trim\nthread will do all the work itself. In this case, there is no need\nsynchronization. This will save unnecessary synchronization and thread\nstate transitions.\n\nChange-Id: If55940946cb3f8b1af42c7237c334f09c8ec7a9f\n"
    },
    {
      "commit": "2cd334ae2d4287216523882f0d298cf3901b7ab1",
      "tree": "b72d3d07e5a04151caca96cae345075b6e4452b0",
      "parents": [
        "604e2828896fbb8663897d1e75112da7305ead4c"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 09 14:03:35 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 23 14:07:32 2015 -0800"
      },
      "message": "More of the concurrent copying collector.\n\nBug: 12687968\nChange-Id: I62f70274d47df6d6cab714df95c518b750ce3105\n"
    },
    {
      "commit": "e34fa1df67fbe0173b4ea9abddcc3ae3d0537037",
      "tree": "a5148f079b5671a95f60910c41981ebf91db3a02",
      "parents": [
        "9f06b1946ae3ef1d2fd75bbf7f0a288bc611fe58"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 14 14:55:47 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 15 12:23:28 2015 -0800"
      },
      "message": "Print more info in MarkSweep::VerifyRoot\n\nRefactored old root callback to use a new class called RootInfo.\nRootInfo contains all the relevant info related to the root\nassociated with the callback. The MarkSweep::VerifyRoot function\nnow uses this info to print the StackVisitor\u0027s described location\nif the GC root is of the type kRootJavaFrame.\n\nSome other cleanup.\n\nExample output:\nE/art     (12167): Tried to mark 0x123 not contained by any spaces\nE/art     (12167): Attempting see if it\u0027s a bad root\nE/art     (12167): Found invalid root: 0x123 with type RootJavaFrame\nE/art     (12167): Location\u003dVisiting method\n\u0027void java.lang.Runtime.gc()\u0027 at dex PC 0xffffffff (native PC 0x0)\nvreg\u003d0\n\n(cherry picked from commit 12f7423a2bb4bfab76700d84eb6d4338d211983a)\n\nBug: 18588862\nChange-Id: Ic5a2781f704e931265ffb3621c2eab4b2e25f60f\n"
    },
    {
      "commit": "1e4b0ca3bde8ea792aad83aefc891628ff6ec806",
      "tree": "c0ca19242b3ad82b7e2df9650457284db4475d14",
      "parents": [
        "127d933868b767eca1ec5446e91a3e8df65c659e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 14 09:06:32 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 14 09:06:32 2015 -0800"
      },
      "message": "ART: Change ternary location for timeout\n\nMake the decision for timeout length in the constant, not at the\nuse site.\n\nBug: 18964791\nChange-Id: I73e6ef5e1c23fd515eaa61ba68236698d3e5c81a\n"
    },
    {
      "commit": "f3401f7a21c99ebec7355de27ab7bc0840f28726",
      "tree": "1a74d2511b50d8eb35b257acfc3ef20934f1f52c",
      "parents": [
        "f9e0e191ad8d8ab1859de95ecb15a57d4bf32107",
        "f9d233dae8ca66ed5a2a474155d6bee0d74c355b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jan 12 08:14:54 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 12 08:14:56 2015 +0000"
      },
      "message": "Merge \"JDWP: allow VirtualMachine.Resume on partial suspension\""
    },
    {
      "commit": "4a3d19bfc16e3f5bfb796fb7ed24404fa77007a4",
      "tree": "3ffc350253cb076592e12e7da9869841eb43c168",
      "parents": [
        "1de532495b2669ce4fae9b9d20848d78d83813d8"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 09 17:54:51 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 09 17:54:51 2015 -0800"
      },
      "message": "ART: Increase dump checkpoint timeout on the host\n\nIncrease the dump checkpoint timeout on the host, as addr2line is\nused and may put more strain onto the system.\n\nBug: 18964791\nChange-Id: I9c1e9c1289fddfce25854e4425194882628bcf21\n"
    },
    {
      "commit": "f9d233dae8ca66ed5a2a474155d6bee0d74c355b",
      "tree": "8d54b26a7bbcc8e376565eacc3bc8a1a097a4a80",
      "parents": [
        "7899cc3c1216b718c4014000a980206ad51159d2"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 09 14:51:41 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 09 16:24:07 2015 +0100"
      },
      "message": "JDWP: allow VirtualMachine.Resume on partial suspension\n\nAllows to resume multiple threads with a single VirtualMachine.Resume\ncommand. When some threads are suspended for an event by the debugger\nwith a suspend count of 1 (other threads are running), a debugger can\nresume them all this way.\n\nBug: 18924933\nChange-Id: I81543df8228d56a4cf201e59885015880650f202\n"
    },
    {
      "commit": "23f6e69e374ce4a7fd0d45f633a3c9efcc8e8a07",
      "tree": "38d80321f7132212d358c1f4f851906a50886d7a",
      "parents": [
        "16b10882f4ce9e5822b278ef0b0adf83afa1b334"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Dec 18 18:24:39 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Dec 18 18:24:39 2014 -0800"
      },
      "message": "Only dump suspend all histogram if we have samples\n\nHelps fix gcstress ThreadStress.\n\nBug: 18576985\nChange-Id: Ibebc0fed8a21e7b149f4b6e5154fb86deddcc68f\n"
    },
    {
      "commit": "70a596d61f8cf5b6447326c46c3386e0fbd5bfb5",
      "tree": "f7affe0a976165eb9ff789270d314463f6e36660",
      "parents": [
        "e9231c0aecc013c61b6cf7f88a228204651d4d41"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 17 14:56:47 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 17 16:03:58 2014 -0800"
      },
      "message": "Add thread suspend histogram\n\nHelps measure time to suspend.\nExample output (maps after a few seconds):\nsuspend all histogram:  Sum: 2.806ms 99% C.I. 2us-1090.560us Avg: 43.843us Max: 1126us\n\nChange-Id: I7bd9dd3b401fb3e3059e8718556d60910e541611\n"
    },
    {
      "commit": "f0dc8b5519102b3d3e738aed846975ae4239421e",
      "tree": "cf6c6b20c12e79595fc680f5da6de5575a6ea80f",
      "parents": [
        "3e2f0fc584463e9da1142a5011ac3f7bcf083e0f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 17 10:13:30 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 17 11:08:15 2014 -0800"
      },
      "message": "Add systrace events to monitors and thread suspension\n\nAdded systrace events to SuspendThreadByPeer, SuspendThreadByThreadId\nand monitor contention.\n\nBug: 18379850\nBug: 17470248\nChange-Id: I29eaf97c67361a6c6b437940b8729600d78696df\n"
    },
    {
      "commit": "82a800d1408937951155f546a3671b83b7379ab5",
      "tree": "9330b333816be80efd98ff2c23124bf7b31185c4",
      "parents": [
        "5dd24d89714aeca69a3a06561d5a3687d54cf43b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 15 15:59:49 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 15 17:06:31 2014 -0800"
      },
      "message": "Decrement suspend count if thread is shutting down\n\nPrevents deadlock caused by incrementing suspend count in\nSuspendThreadByPeer, then getting a cleared nativePeer field. This\nresulted in us not decrementing the suspend count which caused a\ndeadlock in WaitForOtherNonDaemonThreadsToExit.\n\nBug: 18739541\nChange-Id: I4a63f1823993a0f99f32025cd479072be49ba8d5\n"
    },
    {
      "commit": "db978719dbcb73fc6acfd193561445c4462786b8",
      "tree": "be75911bfbe29a50fff685217c8ee155fb99ac10",
      "parents": [
        "015b137efb434528173779bc3ec8d72494456254"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 09 13:33:38 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 09 13:33:38 2014 +0000"
      },
      "message": "Revert \"Tidy gAborting.\"\n\nCreates infinite loop: b/18674776.\n\nThis reverts commit 015b137efb434528173779bc3ec8d72494456254.\n\nChange-Id: I67fe310d2e95ee2ec37bec842be06fb1123b6f4e\n"
    },
    {
      "commit": "015b137efb434528173779bc3ec8d72494456254",
      "tree": "2ccaba9d7465bd9995082a7251d34cf76b1ab1ea",
      "parents": [
        "a21fdd0432aa38b63d144ee4b92b6a567aab61d2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Dec 04 19:53:52 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Dec 04 20:04:45 2014 -0800"
      },
      "message": "Tidy gAborting.\n\nReduce scope to Runtime::Abort and short-cut recursive case earlier. gAborting\nremains global to avoid two fatal errors in thread and the verifier.\n\nChange-Id: Ibc893f891ffee9a763c65cde9507d99083d47b3f\n"
    },
    {
      "commit": "7443c9abb22b10fc45895b2171fc0f67866863b7",
      "tree": "e422ef5fe3ecad66edeb36c1500cbc28e1b859b0",
      "parents": [
        "220526b05d4365a1820a694c98527eda2d3dc980"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 26 11:58:42 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 26 15:45:16 2014 -0800"
      },
      "message": "ART: Avoid a recursive abort\n\nWhen waiting for checkpoints on abort, don\u0027t abort on timeout.\n\nChange-Id: Ic87c25d466021d391563f870642251b69dd62af5\n"
    },
    {
      "commit": "4ad5cd3e7d519484559ef778d96fb3f0be8919fa",
      "tree": "9870938a0552b4fe472d9994a55a3bf761fc69d5",
      "parents": [
        "741e287b60136db49ecf8da72f2b5ca48b0a39bd"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Nov 11 23:08:07 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 12 15:29:12 2014 -0800"
      },
      "message": "Modify the behavior of thread suspend shootouts.\n\nThe thread doing the suspension doesn\u0027t attempt to suspend the other thread\nunless it knows another thread isn\u0027t trying to suspend it. Use the suspend\ncount, and its lock, for this purpose.\nRe-enable ThreadStress test.\nBug: 15446488\n\nChange-Id: Idd34410c7b89d8abd6973e5699a15ca699472c78\n"
    },
    {
      "commit": "4d5d62f404b164b697490d650ad8e82ad79a25f9",
      "tree": "801631d5d76c31fcc2f6836a7b3f4c3b65822b5f",
      "parents": [
        "78a3233313260665fe82ba56257855e043bca3d4",
        "8409ec440079020bbe4ad066cf18a5fadfba67d2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 05 03:32:56 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 05 03:32:56 2014 +0000"
      },
      "message": "Merge \"Make thread dumping more tolerant of broken invariants during abort.\""
    },
    {
      "commit": "277ccbd200ea43590dfc06a93ae184a765327ad0",
      "tree": "d89712e93da5fb2748989353c9ee071102cf3f33",
      "parents": [
        "ad17d41841ba1fb177fb0bf175ec0e9f5e1412b3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 21:36:10 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 04 18:40:08 2014 -0800"
      },
      "message": "ART: More warnings\n\nEnable -Wno-conversion-null, -Wredundant-decls and -Wshadow in general,\nand -Wunused-but-set-parameter for GCC builds.\n\nChange-Id: I81bbdd762213444673c65d85edae594a523836e5\n"
    },
    {
      "commit": "8409ec440079020bbe4ad066cf18a5fadfba67d2",
      "tree": "20a5876198e3292b309b00d88345978f1f194a0e",
      "parents": [
        "b5331ef9bb2ae68c392e5da3da13816bd43e5b1d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Nov 04 17:57:02 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Nov 04 17:57:02 2014 -0800"
      },
      "message": "Make thread dumping more tolerant of broken invariants during abort.\n\nChange-Id: Ie1bc20debe72f2ea2bf4c1be50cd9877c823670a\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": "02567379e7099682345fd59d45a23e17711c9ddd",
      "tree": "afab6024db00d1efb6236fadef9886aefe470973",
      "parents": [
        "a1e50cab308af9f9a94e8bd370111eeff5634914",
        "253fa555d9424a56c52879449eabe73d5c96cf61"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Oct 24 07:49:38 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 24 07:49:38 2014 +0000"
      },
      "message": "Merge \"Fix JDWP Virtualmachine.Resume command\""
    },
    {
      "commit": "c7dd295a4e0cc1d15c0c96088e55a85389bade74",
      "tree": "0c08a2236bc9ba5d9a4dc75d4dd0ed2d76f8f1c6",
      "parents": [
        "94e5af8602150efa95bde35cc9be9891ddf30135"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 21 23:31:19 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 22 12:06:23 2014 -0700"
      },
      "message": "Tidy up logging.\n\nMove gVerboseMethods to CompilerOptions. Now \"--verbose-methods\u003d\" option to\ndex2oat rather than runtime argument \"-verbose-methods:\".\nMove ToStr and Dumpable out of logging.h, move LogMessageData into logging.cc\nexcept for a forward declaration.\nRemove ConstDumpable as Dump methods are all const (and make this so if not\ncurrently true).\nMake LogSeverity an enum and improve compile time assertions and type checking.\nRemove log_severity.h that\u0027s only used in logging.h.\nWith system headers gone from logging.h, go add to .cc files missing system\nheader includes.\nAlso, make operator new in ValueObject private for compile time instantiation\nchecking.\n\nChange-Id: I3228f614500ccc9b14b49c72b9821c8b0db3d641\n"
    },
    {
      "commit": "253fa555d9424a56c52879449eabe73d5c96cf61",
      "tree": "15ad96b41587b1b03aefb401da02f7c26c03ba5e",
      "parents": [
        "3f5b8a1e7dfdf010591e17396d1d126740c5706c"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Oct 14 17:27:15 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Oct 21 19:21:41 2014 +0200"
      },
      "message": "Fix JDWP Virtualmachine.Resume command\n\nWe used to call ThreadList::UndoDebuggerSuspensions but this is not\ncorrect. Indeed Virtualmachine.Resume command should be performed\nas many times as all threads have been suspended (either by the\nVirtualmachine.Suspend command or the application of suspend policy\nALL for event).\n\nThis CL fixes this issue by adding ThreadList::ResumeAllForDebugger.\nIt decrements suspend count and debug suspend count by 1 (globally\nand for each thread).\n\nIt also handles the case where Virtualmachine.Resume is called while\nthreads have not been suspended (global debug suspend count is 0). In\nthis case we just print a warning and do nothing.\n\nBug: 17974047\nChange-Id: I25af22b1936760292d2a8c286e0867f2ae864108\n"
    },
    {
      "commit": "e094b87c6f6ea9ebf83aa56a3114ac59556aaf9f",
      "tree": "d6db16b54affbe5304a8155bee3536b982acafd7",
      "parents": [
        "cfd8adec84701752a56ddccf556b8c40142a9e0f"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Oct 14 13:12:01 2014 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Oct 14 18:12:09 2014 -0700"
      },
      "message": "Store exiting thread ids and names while tracing to output later.\n\nBug: 17909204\n\n(cherry picked from commit fdcbc5c4c7c67bba06e038ac96a2e8bc49b91f84)\n\nChange-Id: Iea087560ba8b983412a6dde2ec166c9e7214f3a1\n"
    },
    {
      "commit": "fec72f4a625122ab9972708b1f44f24b53a8b734",
      "tree": "f996f32dbfc823a7f129208e9deb24263d03c5c1",
      "parents": [
        "a9b097443f26a6df1a322a8fef50fdd1f26a410b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 09 12:57:58 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 09 13:43:46 2014 -0700"
      },
      "message": "Fix race in thread list destructor\n\nThe ThreadList::Contains wasn\u0027t being guarded by the thread list\nlock, which could cause a corrupted thread list if another thread\nunregistered itself while std::find was searching the thread list.\n\nBug: 17896374\n\n(cherry picked from commit b90132cb5132eaeb4dbfca1e63d79b4005dacec5)\n\nChange-Id: I8f6f979f365ca00ac0655e04eb26020d2ad7d6ee\n"
    },
    {
      "commit": "5869a2c27ee0dbd7b420614c76ff14a706f0c5fb",
      "tree": "39bb17a7ae4a4d6c1db99d1a5e07ede899da0aec",
      "parents": [
        "f1f05d303988a5c071c87b760056be8358276c94"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 08 14:26:23 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 08 14:26:23 2014 -0700"
      },
      "message": "Dump mutator lock for thread suspend timeout\n\nShould help us see if thread suspend timeouts are due to someone\nholding on the mutator lock for too long or if it is a missed\nfutex wake.\n\n(cherry picked from commit f924d2381a5ea53967ba1e279766d601b9be05ea)\n\nBug: 17837911\nChange-Id: I3417156a78f574076d5da17c86836c5a7c76084a\n"
    },
    {
      "commit": "f272af4b9dcd39cdd50fa6655601a26e837eaea9",
      "tree": "31e57bb86fadf00aeb05de3f4211320d7a281bf4",
      "parents": [
        "d41491adb23764f28a80cbb7f2bd7af6491cd892"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 18 10:20:42 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 18 11:49:59 2014 +0200"
      },
      "message": "Move spammy logs to JDWP verbose mode\n\nWe are spammed by warning messages when debugging, especially each time we\nsuspend/resume all threads (to update instrumentation or collect monitor info).\nIt\u0027s common to get into the cases where these warnings are logged so they\nshouldn\u0027t be warning but debug messages.\n\nThis CL moves these LOG(WARNING) to VLOG(jdwp) to not disturb developers when\ndebugging their app (especially when looking for specific messages in logcat).\nWe keep them in JDWP verbose mode because they help knowing when we initiate\nthese sequences of \"suspend/resume all threads\".\n\nAlso adds debug suspend count in the log message for more context.\n\nBug: 17524544\nBug: 17170697\nChange-Id: Ic87985ac6913151d15fd89849e41bde61092c3dd\n"
    },
    {
      "commit": "a2af5c7e3262bb7165e9320426bd6925f1a3c90d",
      "tree": "e435735391dd903305fc00862c933354d6acff3d",
      "parents": [
        "bace0378d720a1d2938ec7f6be17e2814671d20a"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Sep 15 15:17:07 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 16 15:49:27 2014 -0700"
      },
      "message": "Only log an error if an unattached thread is unregistered.\n\nTurn a fatal check into a diagnostic error. It looks like this issue arises\nwhen a runtime shutsdown without properly being started.\nBug: 17011539\n\nChange-Id: I2983c8332e83769e9480e8f30a46ca3b80a2e90e\n(cherry picked from commit e2bcf579b0bc2f53db68c38755d69543198c7b00)\n"
    },
    {
      "commit": "2156ff1ff09166ad8270f27d758e913f120c3640",
      "tree": "c00f2c13d5ce557423bb8bf6b02b2e7cf0b1f18d",
      "parents": [
        "0785b90a38f5f2f0d5a9e3890fd16dc63a3bca10"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Sep 13 19:20:54 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Sep 13 19:20:54 2014 -0700"
      },
      "message": "Add time out to dump check point.\n\nChange-Id: I2263c092c9957585ae90cf846e77dc8861f8a14b\n"
    },
    {
      "commit": "7b078e8c04f3e1451dbdd18543c8b9692b5b067e",
      "tree": "414229c6b87eb20ea24c40780752da5a3999a49a",
      "parents": [
        "f79ba17defbd9342e44ab9f3de0807054673d3c9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 10 14:44:24 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 12 14:57:53 2014 -0700"
      },
      "message": "Compile time performance improvements focusing on interpret-only.\n\nReduce virtual method dispatch in the method verifier and make more code\ninline-able.\nAdd a StringPiece with const char* equality operator to avoid redundant\nStringPieces and strlens.\nRemove back link from register line to verifier and pass as argument to reduce\nsize of RegisterLine.\nRemove instruction length from instruction flags and compute from the\ninstruction, again to reduce size.\nAdd suspend checks to resolve and verify to allow for more easy monitor\ninflation and reduce contention on Locks::thread_list_suspend_thread_lock_.\nChange ThrowEarlierClassFailure to throw pre-allocated exception.\nAvoid calls to Thread::Current() by passing self.\nTemplate specialize IsValidClassName.\nMake ANR reporting with SIGQUIT run using checkpoints rather than suspending\nall threads. This makes the stack/lock analysis less lock error prone.\nExtra Barrier assertions and condition variable time out is now returned as a\nboolean both from Barrier and ConditionVariable::Wait.\n\n2 threaded host x86-64 interpret-only numbers from 341 samples:\nBefore change: Avg 176.137ms 99% CI 3.468ms to 1060.770ms\nAfter change: Avg 139.163% 99% CI 3.027ms to 838.257ms\nReduction in average compile time after change is 20.9%.\nSlow-down without change is 26.5%.\n\nBug: 17471626 - Fix bug where RegTypeCache::JavaLangObject/String/Class/Throwable\ncould return unresolved type when class loading is disabled.\nBug: 17398101\n\nChange-Id: Id59ce3cc520701c6ecf612f7152498107bc40684\n"
    },
    {
      "commit": "ed2be1725fb79075892b1a9103487c9d9a95b350",
      "tree": "8adf1d95f401c2c7e7df1c659c0dfcd4dd27a68f",
      "parents": [
        "645f9871115e82ff836397f6470cca825befd245"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Aug 19 15:33:43 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 02 19:28:34 2014 +0200"
      },
      "message": "Reduce lock contention when debugging\n\nUses a ReaderWriterMutex for the breakpoint lock to reduce contention during\ndebugging session.\n\nAlso adds missing thread safety annotations on fields and methods related to\ninstrumentation and debugging.\n\nBug: 16814665\nBug: 11667502\n\n(cherry picked from commit 59d9d668d4f4286813afe2b4e7c6db839222ce96)\n\nChange-Id: I5f1156da8c6cc8316d6db16e6cfb2470fe289ad3\n"
    },
    {
      "commit": "ba32de47e32f436d7c11cb4a2e78bdd4ad4dc5d2",
      "tree": "1b56397dfce317d2034feebfb2191bcb09b78823",
      "parents": [
        "14515d738dadf88e3e00b7dd1bd69899c4df4b91"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Aug 27 23:43:46 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Aug 28 15:37:27 2014 -0700"
      },
      "message": "Fix issue with Thread.setName hanging after Thread.start\n\nWhen suspending a thread by peer the invariant that only attached threads are\nsuspended must be maintained. Add a ThreadList::Contains check which requires\nmaking this method non-static.\nAdd some extra thread logging.\n\nBug: 17302037\n\n(cherry picked from commit 37c16453a92bbf1a47f042000318a1b60381017d)\n\nChange-Id: I51832785d4b4b431e035318e75635f442e89a1fb\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": "c5d824a20c225763761a6dff43294b229ff35469",
      "tree": "d3fcf29c2e7359bdb135931c0f4558644e1ca9fb",
      "parents": [
        "8df73882c60451e7f789bf9b1f3db2d7dc228640"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Jul 28 18:35:38 2014 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Jul 29 13:34:57 2014 -0700"
      },
      "message": "Stop thread from reattaching during runtime shutdown while tracing.\n\nBug: 16024763\nChange-Id: Iad5ba180241ff74b15baf5c3a15ed2d2ed60fcf0\n"
    },
    {
      "commit": "f3d874c60ee3ada19ce26a5c4e532312b6f3a9e9",
      "tree": "de14ab8b610f43a2c2c4c02f4ac67d614919fde2",
      "parents": [
        "031ddea20cb311dfdb3bd16a13750f9cb426b299"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 18:52:42 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 18:59:40 2014 -0700"
      },
      "message": "Avoid race in single thread suspension.\n\nDon\u0027t allow more than one concurrent single thread suspension to avoid\npotential cycles and deadlocks where threads try to suspend each other.\nBug: 16364458, 16354227\n\nChange-Id: I907f1d5591a6aa5c241d37d6b4a34f968f98df77\n"
    },
    {
      "commit": "251755cd511463260e60be98bf138b6aa1c14bf3",
      "tree": "03c0e714efa3c9b54c2218cd4d5e64b27be01811",
      "parents": [
        "76e6773dfed9e9bf382bbb8d6c8654525fa44b0c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 15 18:10:25 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 15 18:32:02 2014 -0700"
      },
      "message": "Use sched_yield in Monitor::MonitorEnter.\n\nPreviously we used NanoSleep(1000), but this was unreliable. It could\nresult in waiting for \u003e\u003d 40ms instead of 1us. Since this was in a loop\nit was especially bad if the GC was trying to suspend all the\nthreads when we were sleeping. This resulted in thread suspension\noccasionally taking longer than a second.\nResults on the provided picasso-sample app on Nexus 5:\nLongest GC pause before: ~1.5s.\nLongest GC pause after: \u003c5ms.\n\nAlso added a warning if thread suspension takes longer than a\nthreshold (currently 5ms).\n\nBug: 16307460\nExternal bug: https://code.google.com/p/android-developer-preview/issues/detail?id\u003d367\n\nChange-Id: I3c2a9636357e255f38634615101eff8ca84e632f\n"
    },
    {
      "commit": "bae182cbc6adc8796154162a87fc54ae804e0469",
      "tree": "d5c1fdb048edab194e948e4e90bff66703c5f55e",
      "parents": [
        "0c1734665c38b3116e38a90ad06c3f152d9316c5"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Dec 17 10:42:03 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jul 09 16:10:45 2014 +0200"
      },
      "message": "Fix method tracing from command-line\n\nTransitions current thread to the new kWaitingForMethodTracingStart thread\nstate when starting method tracing.\n\nEnsures there is a current thread when method tracing is stopped due to runtime\nshutdown. If the current thread has been detached, we now re-attach it.\nNote: we only do this if method tracing has been activated from command-line.\n\nFixes instrumentation when forcing interpreter mode (-Xint) with method tracing\nenabled.\n\nRemoves unused parameter from UnsafeLogFatalForThreadSuspendAllTimeout.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d72094\nBug: 11683397\nChange-Id: I70f000fb46ddd95d6ad51ea0a8eee77697a045e9\n"
    },
    {
      "commit": "9db911eb76976fc1c73c8e563beb3620f1cadf99",
      "tree": "0d9fa7344f7d356fedbbfeeff3cd8eb289e0435f",
      "parents": [
        "4eef72bdf5fd83e7361fb11feaf5a40121ede03f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jun 04 11:23:58 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jun 04 12:03:48 2014 -0700"
      },
      "message": "Print mutexes held in Thread::Dump.\n\nShould help finding and fixing thread suspend timeout issues.\n\nBug: 15328839\nChange-Id: I30a10529cec0716c7571a0318e9f66be54734fd8\n"
    },
    {
      "commit": "9e36931cc79ca665908db9575126881d1cfdea5a",
      "tree": "69099016576581e3e4d6c44ee01a7a6cc7db4b2c",
      "parents": [
        "5da6e2b88258733dd3856543af27ca73b395ef60"
      ],
      "author": {
        "name": "Chao-ying Fu",
        "email": "chao-ying.fu@intel.com",
        "time": "Wed May 21 11:20:52 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 22 10:25:57 2014 -0700"
      },
      "message": "Move modify_ldt_lock into global lock order.\n\nMutex modify_ldt_lock was being removed during runtime shutdown while\ndaemons thread may still detach. Avoid this by placing in global lock\norder.\nThis fixes cts dalvik vm-tests-tf that hang on some x86 devices.\n\nBy irogers: also, tidy global locks to agree with enum constants and\nadd extra verification that the global annotalysis order agrees with\nthe LockLevel order. Bumped the oat version and moved the locks as\nLockLevel additions previously caused entrypoints to be moved. Make\nunattached lock not handle the default mutex level case by moving the\nallocated thread ids lock into the global order.\n\nChange-Id: I9d03f19d44ea254accf0ceae8022563c77f7a02f\nSigned-off-by: Chao-ying Fu \u003cchao-ying.fu@intel.com\u003e\n"
    },
    {
      "commit": "5a9ba014516fcdeab617d1c006fdf2936865f178",
      "tree": "602819f9d2f0fcd9876054f8601355362665f23a",
      "parents": [
        "394584556dac07794a092cf0098089ebdb5b81d0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 13:28:52 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 13:28:52 2014 -0700"
      },
      "message": "Build fix.\n\nChange-Id: Ie5a3abb9a729a4a724e247b127c200a7be4d900d\n"
    },
    {
      "commit": "4d466a8e4587422c989705dce3b2a19e7f0137f5",
      "tree": "bd8f0f45db9a7d5888b14a070690f59fb599bd68",
      "parents": [
        "f1c036fc8fa97617cc42bda44a0adbc7b856d6cd"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu May 08 19:05:29 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri May 09 12:23:00 2014 -0700"
      },
      "message": "Remove all LOG(DEBUG) which is not intended to be checked in\n\nBug: 14632493\nChange-Id: Id9da8b87798af0a1b2bd2c178133e5f1ba47d43d\n"
    },
    {
      "commit": "6f365cc033654a5a3b45eaa1379d4b5f156b0cee",
      "tree": "959754c43ebd2b01e366ac06f21d833340a7fee5",
      "parents": [
        "cb905718826da268d8d8e09296806256f202c9f4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 23 12:42:27 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 29 12:58:08 2014 -0700"
      },
      "message": "Enable concurrent sweeping for non-concurrent GC.\n\nRefactored the GarbageCollector to let all of the phases be run by\nthe collector\u0027s RunPhases virtual method. This lets the GC decide\nwhich phases should be concurrent and reduces how much baked in GC\nlogic resides in GarbageCollector.\n\nEnabled concurrent sweeping in the semi space and non concurrent\nmark sweep GCs. Changed the semi-space collector to have a swap semi\nspaces boolean which can be changed with a setter.\n\nFixed tests to pass with GSS collector, there was an error related to\nthe large object space limit.\n\nBefore (EvaluateAndApplyChanges):\nGSS paused GC time 7.81s/7.81s, score: 3920\n\nAfter (EvaluateAndApplyChanges):\nGSS paused GC time 6.94s/7.71s, score: 3900\n\nBenchmark score doesn\u0027t go up since the GC happens in the allocating\nthread. There is a slight reduction in pause times experienced by\nother threads (0.8s total).\n\nAdded options for pre sweeping GC heap verification and pre sweeping\nrosalloc verification.\n\nBug: 14226004\nBug: 14250892\nBug: 14386356\n\nChange-Id: Ib557d0590c1ed82a639d0f0281ba67cf8cae938c\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": "bb43b433c845e253a11346f0f03706d58a44f23c",
      "tree": "406fda2973407461cbadd7d0bf45afc109bfedad",
      "parents": [
        "9b417e4f0f87da6bfe8dc5f02c987acfcb6dca31"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 14 11:59:08 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 14 12:01:15 2014 +0200"
      },
      "message": "Clear unused roots from debugger\n\nSingleStepControl and DebugInvokeReq hold roots which are only used during a\nlimited amount of time. Clear these roots once we finish using them.\n\nAlso cleans some code around single-step.\n\nChange-Id: Ica2f65e04a4d60272199490cd40ad1803d3b9f02\n"
    },
    {
      "commit": "7bf9f190cd33a7e2f8584299eb889e9df66e0323",
      "tree": "1817368ef167a6340129d2a59b0c423f5c87d604",
      "parents": [
        "34df691e64a6491e7312a850a1ad255e4cf02702"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 04 11:09:41 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 04 11:22:27 2014 -0700"
      },
      "message": "Improve invalid root dumping.\n\nThe invalid root dumping now attempts to print the root type.\n\nChange-Id: Ie821296d569f34909ba6e2705f5c347cd2143a3a\n"
    },
    {
      "commit": "2966e13d504a72d55c62bf864e183ec80703c699",
      "tree": "ce13371288e4a08e8b627eeafd18a5b9746ecec4",
      "parents": [
        "161f71ab4449047157ad3d967a3ed4f7c6e17249"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Apr 02 08:34:36 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Apr 02 08:36:46 2014 -0700"
      },
      "message": "Avoid debug check violation in thread registration.\n\nBug: 13757855\nChange-Id: Ied83a7fc43e2b9a89a8b99aa4f74069ef8a369b1\n"
    },
    {
      "commit": "dd7624d2b9e599d57762d12031b10b89defc9807",
      "tree": "c972296737f992a84b1552561f823991d28403f0",
      "parents": [
        "8464a64a50190c06e95015a932eda9511fa6473d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Mar 14 17:43:00 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Apr 01 08:24:16 2014 -0700"
      },
      "message": "Allow mixing of thread offsets between 32 and 64bit architectures.\n\nBegin a more full implementation x86-64 REX prefixes.\nDoesn\u0027t implement 64bit thread offset support for the JNI compiler.\n\nChange-Id: If9af2f08a1833c21ddb4b4077f9b03add1a05147\n"
    },
    {
      "commit": "b373e091eac39b1a79c11f2dcbd610af01e9e8a9",
      "tree": "034d820c4829e0dcf6161473cc39f7250123bfaa",
      "parents": [
        "9545a446e99b22248099fe66f5f9431530c20851"
      ],
      "author": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Thu Feb 20 16:06:36 2014 -0800"
      },
      "committer": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Thu Mar 13 12:21:15 2014 -0700"
      },
      "message": "Implicit null/suspend checks (oat version bump)\n\nThis adds the ability to use SEGV signals\nto throw NullPointerException exceptions from Java code rather\nthan having the compiler generate explicit comparisons and\nbranches.  It does this by using sigaction to trap SIGSEGV and when triggered\nmakes sure it\u0027s in compiled code and if so, sets the return\naddress to the entry point to throw the exception.\n\nIt also uses this signal mechanism to determine whether to check\nfor thread suspension.  Instead of the compiler generating calls\nto a function to check for threads being suspended, the compiler\nwill now load indirect via an address in the TLS area.  To trigger\na suspend, the contents of this address are changed from something\nvalid to 0.  A SIGSEGV will occur and the handler will check\nfor a valid instruction pattern before invoking the thread\nsuspension check code.\n\nIf a user program taps SIGSEGV it will prevent our signal handler\nworking.  This will cause a failure in the runtime.\n\nThere are two signal handlers at present.  You can control them\nindividually using the flags -implicit-checks: on the runtime\ncommand line.  This takes a string parameter, a comma\nseparated set of strings.  Each can be one of:\n\nnone        switch off\nnull        null pointer checks\nsuspend     suspend checks\nall         all checks\n\nSo to switch only suspend checks on, pass:\n-implicit-checks:suspend\n\nThere is also -explicit-checks to provide the reverse once\nwe change the default.\n\nFor dalvikvm, pass --runtime-arg -implicit-checks:foo,bar\n\nThe default is -implicit-checks:none\n\nThere is also a property \u0027dalvik.vm.implicit_checks\u0027 whose value is the same\nstring as the command option.  The default is \u0027none\u0027.  For example to switch on\nnull checks using the option:\n\nsetprop dalvik.vm.implicit_checks null\n\nIt only works for ARM right now.\n\nBumps OAT version number due to change to Thread offsets.\n\nBug: 13121132\nChange-Id: If743849138162f3c7c44a523247e413785677370\n"
    },
    {
      "commit": "39c3bfbd03d85c63cfbe69f17ce5800ccc7d6c13",
      "tree": "fa777039b3f7c34f3dd322d04307766246526080",
      "parents": [
        "0918614b7434783477e8668df7850a7aaf8d5611"
      ],
      "author": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Tue Jan 28 18:33:52 2014 -0800"
      },
      "committer": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Fri Mar 07 13:42:48 2014 -0800"
      },
      "message": "Make use of profiling information for dex2oat\n\nIf the profile file exists, the compiler driver will read it\nand store the data in an internal map.  Then, when we want to work\nout whether to compile a method or not, the map is consulted and if\nthe method shows up with a high enough percentage of use we compile it.\n\nThe profile file itself is created by installd and is writeable by the\napp.  The file is in /data/dalvik-cache/profiles and is named by\nthe package name.\n\nThis also modifies the profiler itself to:\n\n1. Only count runnable threads (not suspended threads) in the profile\n2. Use system properties to allow tuning of the profile parameters\n3. Merge profiles from multiple processes using file locking.\n\nBug: 12877748\nChange-Id: Iab2f3a327a2860db2a80d5724277d6c626227f2b\n\nConflicts:\n\tcompiler/dex/frontend.cc\n\tcompiler/dex/mir_analysis.cc\n\tcompiler/dex/verification_results.cc\n\tcompiler/driver/compiler_driver.cc\n\tdex2oat/dex2oat.cc\n\truntime/class_linker.cc\n\truntime/runtime.cc\n\truntime/runtime.h\n"
    },
    {
      "commit": "719d1a33f6569864f529e5a3fff59e7bca97aad0",
      "tree": "fcd84efd7b9806b93ec1a44e2317e6f882e7fe0e",
      "parents": [
        "5365eea9940269b662cfbe103caa348816ff1558"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 06 12:13:39 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 06 19:16:01 2014 -0800"
      },
      "message": "Enable annotalysis on clang ART builds.\n\nFix clang build errors aswell as restructure locking/mutex code for correct\nthread safety analysis support.\nReorder make dependencies so that host builds build first as they should\nprovide better compilation errors than target.\nRemove host\u0027s use of -fno-omit-frame-pointer as it has no value with correct\nuse of CFI, which we should have.\n\nChange-Id: I72cea8da9a3757b1a0b3acb4081feccb7c6cef90\n"
    },
    {
      "commit": "6dda898d47b3e8931e4404330e81b7110108e34f",
      "tree": "d8a0a20b8ac1ce3cd44273cf5c748d09980bd800",
      "parents": [
        "8785d615122d4abbd22db702139584e8c472f502"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 06 11:11:48 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 06 11:43:06 2014 -0800"
      },
      "message": "Disable compaction for jni workarounds.\n\nCompaction can\u0027t work when jni workarounds is enabled. Also some\nother refactoring.\n\nChange-Id: Ia7b0f2b39c79f5a0a5f50874d823b950ab02a0c3\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": "c06fec227cd8da8b0a8be64f7268322f6b563377",
      "tree": "bc3a6e3002e79d7e374205207eb8d0bfa6b58098",
      "parents": [
        "a2a5354cd95faf242a70b99b7b11f8fdb7cb7c1b",
        "815873ecc312b1d231acce71e1a16f42cdaf09f2"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Feb 19 18:55:42 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 19 18:55:42 2014 +0000"
      },
      "message": "Merge \"Change root visitor to use Object**.\""
    }
  ],
  "next": "21e729c7859ce7909e85d135f6c9e32bbba38860"
}
