)]}'
{
  "log": [
    {
      "commit": "8cf9cb386cd9286d67e879f1ee501ec00d72a4e1",
      "tree": "88e86e214b425e444760fe4e0ffeee677e1558a2",
      "parents": [
        "914b7b6a6c9f399b26b41e9160e9871ef749e0db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 19 09:28:38 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 24 16:07:10 2017 -0700"
      },
      "message": "ART: Include cleanup\n\nLet clang-format reorder the header includes.\n\nDerived with:\n\n* .clang-format:\n BasedOnStyle: Google\n IncludeIsMainRegex: \u0027(_test|-inl)?$\u0027\n\n* Steps:\n find . -name \u0027*.cc\u0027 -o -name \u0027*.h\u0027 | xargs sed -i.bak -e \u0027s/^#include/ #include/\u0027 ; git commit -a -m \u0027ART: Include cleanup\u0027\n git-clang-format -style\u003dfile HEAD^\n manual inspection\n git commit -a --amend\n\nTest: mmma art\nChange-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02\n"
    },
    {
      "commit": "e431e2758d62cf56f7f347f5a8c9d79e41b6dcd7",
      "tree": "b8733533e2478069aabbdc3a34d0f40aff33e1b1",
      "parents": [
        "b98d384eb424ad7e1dc9816392ded33dce0e0372"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 18 16:53:49 2017 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 18 18:25:55 2017 -0700"
      },
      "message": "art: use proper nativehelper headers\n\nlibnativeheader exports headers under nativeheader. These were\navailable before incorrectly as global headers in order to give\naccess to jni.h.\n\nTest: modules using art find headers\nBug: 63762847\nChange-Id: I5c820d677e94e07b2859e78610bc997fe51b41dc\n"
    },
    {
      "commit": "88fd720b6799184c8ad61e766a6d37af33ed30ef",
      "tree": "80e49456eafd44b0ad8790be456ae06949fcc506",
      "parents": [
        "1cba8d219331e4d6994359e8f9104e5db2c8f8a9"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 30 08:31:59 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jul 13 09:11:03 2017 -0700"
      },
      "message": "Add Jvmti Suspend/ResumeThread functions\n\nEnable the can_suspend jvmti capability and implement all required\nfunctionality associated with it.\n\nTest: ./test.py --host -j40\nBug: 34415266\nBug: 62821960\nBug: 63579748\n\nChange-Id: I83b92de7f81622e1658114b034918e8295805b6e\n"
    },
    {
      "commit": "46f9340f2a055a8fdfebbfbb739c697c20d83e7c",
      "tree": "acb172f74723e4ea9ac7ded73b94c661217ec90d",
      "parents": [
        "fe9a4f061841a3c597aac6817a47c799c54fcad7"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 29 11:59:50 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 30 14:24:56 2017 +0000"
      },
      "message": "Add SuspendReason enum and change Suspension functions.\n\nMore self-documenting and more type safe.\n\nBug: 62821960\nTest: ./test.py\nChange-Id: Ic7a1ae6a25e687d65f5aa10c1aad54a7b80dd086\n"
    },
    {
      "commit": "5544e721c3e2a3e344c26b9e1c9ad9472fb8cd58",
      "tree": "58e65b9003f06166bb330b395cd8017dd79ab2b8",
      "parents": [
        "4f101e5b6ae214a73bdd912374f5dc565d336e47"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 17:01:27 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 17:02:55 2017 -0700"
      },
      "message": "ART: Replace some \u0027\\n\u0027 with std::endl\n\nInduce flushing the ostreams at strategic points to improve\nlog visibility.\n\nBug: 62337922\nTest: m test-art-host\nChange-Id: Ic4b4c698b568575b55160fff0ad5c31fa6b4018a\n"
    },
    {
      "commit": "ae4c845b2aadc1e5bc098d54f1ba4914096b9c83",
      "tree": "f1da5fba969e751a415f1e3cbe53dbf94b2e35f5",
      "parents": [
        "1656ca9e6996cb555b4463e5efd4bd7e3f4fb816"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 01 18:45:10 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 02 09:31:56 2017 -0700"
      },
      "message": "Revert \"Change thread suspend timeout to be fatal for non-debug\"\n\nFor overloaded systems, 10s might not be enough. Infinite seconds\nwill be though.\n\nBug: 37221387\n\nTest: test-art-host\n\nThis reverts commit d69f82e155118654d989f0b436c019fb6d517341.\n\n(cherry picked from commit 111b0e05d130d345857ad875be484e3839ce25d4)\n\nChange-Id: Id17d94c71360f5de3bb67eb22d05e148dd5238d3\n"
    },
    {
      "commit": "513061a792b22c417c938d31c19581390709561c",
      "tree": "80b4fdce03711170626aa5640d07b07de4a326a1",
      "parents": [
        "38c4ae5f4c5a033b7a7441032f39ea58f5772d4c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 09:17:34 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 12:59:13 2017 -0700"
      },
      "message": "ART: Clean up thread.h and thread_list.h\n\nRemove dependency on stack.h and gc_root.h. Remove unused object\ncallbacks include. Factor out ManagedStack into its own set of files.\nFix up users of transitive includes.\n\nTest: m test-art-host\nChange-Id: I01286c43d8c7710948c161b1348faabb05922e59\n"
    },
    {
      "commit": "d49012909625c3bf87bf51138fe79315ce1b1bdc",
      "tree": "349ef2cdcb7255d042244046601bd0fd5eb3a092",
      "parents": [
        "726e1793d3f54470705e5b84e7860074e029b0ed"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 30 18:41:34 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 30 20:44:33 2017 -0700"
      },
      "message": "ART: Clean up heap headers\n\nUse more forward declarations for accounting structures and spaces.\nFactor out structs to reduce header surface. Remove heap include where\nunnecessary. Fix up transitive users. Move some debug-only code out\nof line.\n\nTest: m test-art-host\nChange-Id: I16db4aaa803f39e155ce6e1b0778b7e393dcbb17\n"
    },
    {
      "commit": "6e6444508de1afaeaf612970fad608b58b89b009",
      "tree": "ea42cbed1450be598869ef406bb1a6c31a7e4f77",
      "parents": [
        "270970e660d3c99e62a88b18144d159dd8699c55"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 09 16:30:27 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 10 10:07:32 2017 -0700"
      },
      "message": "ART: Make GC Pause Listener more precise\n\nRefactor code to call the listener in FlipThreadRoots, after all\nthreads have been suspended.\n\nBug: 37283268\nTest: m test-art-host\nChange-Id: I313db07e014e65a997d0b58c8a70e4505425def0\n"
    },
    {
      "commit": "824fd239f7260d9cc0e9ce95e512bacfb156a81b",
      "tree": "0a713814863c6fbcb4fb4a5f3fd124b5822f8770",
      "parents": [
        "d4a68c85f6e6395d18d4ced9b99099490e407c59",
        "3768adec2f819cb506577618fdde158ba659ddd4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 03 23:18:31 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 03 23:18:33 2017 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Add concurrent card graying for immune spaces\"\"\""
    },
    {
      "commit": "3768adec2f819cb506577618fdde158ba659ddd4",
      "tree": "38f929a1ec79088f1f4d3a205672acfb261af94b",
      "parents": [
        "55e8cd14fdbe257f4ecdd5d629eef6b8c93567c9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 02 14:04:39 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 02 19:42:39 2017 -0700"
      },
      "message": "Revert \"Revert \"Add concurrent card graying for immune spaces\"\"\n\nAdded an additional checkpoint before the concurrent graying to set\nthe mark entrypoints to non-null.\n\nBug: 37876887\n\nTest: test-art-host\n\nThis reverts commit c83dd7bfde2171c879efb92a31a363505385ffb9.\n\nChange-Id: I961c4631c9595c52cd7765f61b22b8291fef2088\n"
    },
    {
      "commit": "c4bed16daa6689eaa2148261b19662291417ced6",
      "tree": "56d03d48010091acb6f2551e1381097b6148d106",
      "parents": [
        "7113885fcd983b33ee1e350865d21517d6297843"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon May 01 13:46:24 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 02 14:01:41 2017 -0700"
      },
      "message": "ART: Change shutdown order\n\nAdd explicit Shutdown method to ThreadList, doing the work that\nwas previously in the destructor. Call sid method before unloading\nplugins and stopping the debugger.\n\nModulo daemon threads, this ensures that thread events will have\nquiesced when plugins stop.\n\nBug: 37763974\nTest: m test-art-host\nChange-Id: I11d22f2c89a68e9f6720d61967b8e5aea41188dc\n"
    },
    {
      "commit": "1c8f4ff04062407db3d2dd834dd6bc24f6662c4d",
      "tree": "a116c7d55fc1bcff2b451028f46a1196ee15d990",
      "parents": [
        "c1be9f2b776b4900e0603013f7c4d84e534f0bb0"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 14 15:05:12 2017 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 18 18:06:54 2017 +0200"
      },
      "message": "Always check result of Thread::ModifySuspendCount\n\nEnsures that we never ignore the result of ModifySuspendCount so that\nwe can react if the suspend count is not updated as expected.\n\nThis CL does the following:\n* Adds __attribute__((warn_unused_result)) on the method to raise an\n  error at compilation time if the result is ignored.\n* Wraps calls with DCHECK where the result used to be ignored.\n\nBug: 27385848\nTest: make -j test-art-host\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64\nChange-Id: I2d0e1ab7158c70ec8076c8bae6e4b814aee75af6\n"
    },
    {
      "commit": "d69f82e155118654d989f0b436c019fb6d517341",
      "tree": "86cca66b3b69aedcc7ee8dd544ac08e52d255797",
      "parents": [
        "f9806373ca50896ac54cb9da49a030c13ec14769"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 21 08:40:57 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 21 08:41:34 2017 -0700"
      },
      "message": "Change thread suspend timeout to be fatal for non-debug\n\nRight now it just loops forever and doesn\u0027t give any stack traces\nregarding probable deadlocks.\n\nBug: 36408743\n\nTest: test-art-host\n\nChange-Id: Ib8919f4be540291d8226dd0e7eb88c7faf7cdde9\n"
    },
    {
      "commit": "a222404a5832ab16786931576d52825d08eed3ca",
      "tree": "7350e5efbb6ef72c33e82753d79f7f4bed92d9d4",
      "parents": [
        "1561de49b382627ddd277b8ad7e5e8f4cec32f0b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Feb 08 16:35:45 2017 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Feb 10 16:15:01 2017 -0800"
      },
      "message": "Fix the empty checkpoint timeout.\n\nThe problem happens when a thread is indirectly blocked on a mutex\nthat another thread holds and is blocked on a weak ref access.\n\nAdd a way to do a dummy wakeup on a thread that\u0027s blocked on a mutex\nso that the thread will respond to the empty checkpoint request. Do\nthis for the mutexes that are expected to be held when a weak ref is\naccessed. Add a check that detects an unexpected case.\n\nBug: 33006388\nBug: 12687968\nTest: test-art-host.\nChange-Id: Iefec69b9a21aa25a928cb31fcf4fb872f867a8c2\n"
    },
    {
      "commit": "e9429c8c5f8c5541dcbe97e03c55cba175bce182",
      "tree": "9f030b57193e34f87088249d8f1ad4151a197233",
      "parents": [
        "a0305a27fc2da2bff16415e2edf733db2adf202f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 27 15:22:56 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 27 15:32:09 2017 -0800"
      },
      "message": "Add to time to suspend in FlipThreadRoots to histogram\n\nAdd the time to suspend to the suspend_all_historam_ to determine if\nGC pauses are caused by GC or bad mutator activity.\n\nAlso exclude ThreadFlipBegin time being counted as paused since it\nhappens before threads are suspended.\n\nTest: test-art-host\n\nChange-Id: Ia55db0ebbdc7ba6f23d7212c0e42c7806b297c2b\n"
    },
    {
      "commit": "3fceaf500d570722122f2d092f302d27769e3a51",
      "tree": "1c38d3a72559cb2f9454e445e3d5ddc7168170df",
      "parents": [
        "388df9e0943fd4c858b99f268d9655336df17062"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Jan 22 13:33:40 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Jan 22 13:45:44 2017 -0800"
      },
      "message": "Use higher default thread suspend timeout for run tests\n\nIncrease the default for tests from 10s-50s to 500s. This is done\nby adding a run-test option \"--suspend-timeout\" that defaults to\n500000.\n\nExample when passing a low value of 100:\ntest/run-test --host --suspend-timeout 100 --dev 004-ThreadStress\n\nResults in:\ndalvikvm32 F 01-22 13:33:31 12067 12118 thread_list.cc:669] Timed\nout waiting for threads to suspend, waited for 100.114ms\n\nThis should fix some of the recent test flakiness.\n\nTest: test-art-host\n\nChange-Id: I303c4f198e560e9f38ec375e9d7a80a5e61f776e\n"
    },
    {
      "commit": "32c8337f9fcb8e7026b7ee67dc4ff3e1ca74830e",
      "tree": "54b1f794ae537ed43b1bedf560bfd992b3b3697a",
      "parents": [
        "a28ddf5140cd1f4a2ae93dbf8be2f200b1552003"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 11 10:09:30 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 11 10:36:57 2017 -0800"
      },
      "message": "Increase thread suspension timeout for debug builds\n\nThe current timeout may be causing some test failures. Also print how\nlong we waited.\n\nTest: test-art-host -j32\n\nChange-Id: Ib8a9c68ab4571efc8456c098b03bf35f648bfaf1\n"
    },
    {
      "commit": "35af2ad461e9745252bdc2c1c5a0cad1386626d4",
      "tree": "9ce6b0191a6ea443047aa534d4f0594c76c83941",
      "parents": [
        "c51c7ca7a779563d153c137c6bf01c3ea532a6c9"
      ],
      "author": {
        "name": "rock.yeh",
        "email": "app1_test@weckout.com",
        "time": "Fri Dec 23 15:11:13 2016 +0800"
      },
      "committer": {
        "name": "rock.yeh",
        "email": "app1_test@weckout.com",
        "time": "Mon Jan 09 01:48:01 2017 +0000"
      },
      "message": "Use relative futex timeout in SuspendAllInternal.\n\nThis erroneously used an absolute timeout for FUTEX_WAIT, potentially \ncausing it to block for MUCH longer than 10 seconds.\nhttp://man7.org/linux/man-pages/man2/futex.2.html\nNote: for FUTEX_WAIT, timeout is interpreted as a relative value.\n\nError case:\nkernel time: 15842.476344\nnsec: 31694950164731\n12-22 20:25:48.020043     0     0 F [15842.476344][HeapTaskDaemon:3008]\nfutex_wait 00000070fcdf8980 1 1 31694950164731\n\nNormal case:\nkernel time: 15842.476344\nnsec: 15842476344\n\nBlock backtrace:\n\"HeapTaskDaemon\" sysTid\u003d3008\n  #00 pc 000000000001bcac  /system/lib64/libc.so (syscall+28)\n  #01 pc 0000000000461db0  /system/lib64/libart.so\n(_ZN3art10ThreadList18SuspendAllInternalEPNS_6ThreadES2_S2_b+720)\n  #02 pc 000000000046249c  /system/lib64/libart.so\n(_ZN3art10ThreadList10SuspendAllEPKcb+532)\n  #03 pc 00000000001e8fc8  /system/lib64/libart.so\n(_ZN3art2gc9collector9MarkSweep9RunPhasesEv+232)\n  #04 pc 00000000001e1694  /system/lib64/libart.so\n(_ZN3art2gc9collector16GarbageCollector3RunENS0_7GcCauseEb+332)\n  #05 pc 0000000000211500  /system/lib64/libart.so\n(_ZN3art2gc4Heap22CollectGarbageInternalENS0_9collector6GcTypeENS0_7Gc\nCauseEb+3048)\n  #06 pc 0000000000218acc  /system/lib64/libart.so\n(_ZN3art2gc4Heap12ConcurrentGCEPNS_6ThreadEb+124)\n  #07 pc 000000000021fbf4  /system/lib64/libart.so\n(_ZN3art2gc4Heap16ConcurrentGCTask3RunEPNS_6ThreadE+36)\n\nThis is a fix patch log and each timeout log interval of 10 seconds:\n12-27 03:27:46.153744 1631 1713 E art : Unexpected time out during \nsuspend all. \n12-27 03:27:56.154401 1631 1713 E art : Unexpected time out during \nsuspend all. \n12-27 03:28:06.154956 1631 1713 E art : Unexpected time out during \nsuspend all.\n"
    },
    {
      "commit": "46ee31b67d7ee1bd085fbc240502053caa3cf8fa",
      "tree": "83e870f293cd60d533207e389d7b094acd87b31f",
      "parents": [
        "9538f9e2a5d03f1b1bc07ebfbd93b61dcf8ad604"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 14 10:11:49 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 15 09:50:39 2016 -0800"
      },
      "message": "ART: Move to libbase StringPrintf\n\nRemove ART\u0027s StringPrintf implementation. Fix up clients. Add\nmissing includes where necessary.\n\nTest: m test-art-host\nChange-Id: I564038d5868595ac3bb88d641af1000cea940e5a\n"
    },
    {
      "commit": "585da955bc8e5040705dcfd941b2131025ebcef8",
      "tree": "d22555ab3b33b446271fcbbd1676177d21d7221f",
      "parents": [
        "ce29d1813914ee9a9e9b04b034968f09694dd557"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Dec 02 14:52:29 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 12 11:47:02 2016 -0800"
      },
      "message": "ART: Add precise root visiting\n\nAdd VisitRootFlags::kVisitRootFlagPrecise to signal a\nrequest for precise RootInfo objects.\n\nMove VisitRootFlags to gc_root.h. Refactor VisitRoot\nfunctions to pass flags. Add code in Thread visiting\nto decode vregs in compiled code.\n\nBug: 31385354\nTest: m test-art-host\nChange-Id: I8e7280f0ab682871f729f2a1c6b18670cf2dbf82\n"
    },
    {
      "commit": "a82769c1168d38fb4d36eaecfc186aecb17d4b16",
      "tree": "ae5056ff9a92f17b54e40f3410626198772b1612",
      "parents": [
        "5eb1e1e7341f4e7febf77c04f8649a9566b31c03"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Dec 02 17:01:51 2016 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Dec 02 18:15:10 2016 -0800"
      },
      "message": "Dump more debug info for b/33006388.\n\nBug: 33006388\nBug: 12687968\nTest: test-art-host with CC.\nChange-Id: Id9d67bc603c6ff7bc8e346e181e3e09ffbda43b3\n"
    },
    {
      "commit": "39ce7d2907edb978f1ab6cd75884be48ab11cd77",
      "tree": "7d2f0c56bd8a7dd483b5c1ede7047b623d0e35d7",
      "parents": [
        "5302bd999afee6db5b0cfd63e6a49b0fcbf92dd4",
        "3049324f4ef71b5d7a3de49bd77c75f07dbf8f3a"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Nov 11 18:44:44 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 11 18:44:44 2016 +0000"
      },
      "message": "Merge \"Make empty checkpoint work while weak ref access is disabled.\""
    },
    {
      "commit": "fe814e89965ddf9a8b603863bd28259f8dd7be35",
      "tree": "32ecc282f176d0e2a98f41f6e4b116d26cf58bee",
      "parents": [
        "977919fbcbfbf0c1c3fa97e51490bc678da646d2"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 09 14:32:49 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 10 14:41:28 2016 -0800"
      },
      "message": "Use entrypoint switching to reduce code size of GcRoot read barrier\n\nSet the read barrier mark register entrypoints to null when the GC\nis not marking. The compiler uses this to avoid needing to load the\nis_gc_marking boolean.\n\nCode size results on ritzperf CC:\narm32: 13439400 -\u003e 13242792 (-1.5%)\narm64: 16380544 -\u003e 16208512 (-1.05%)\n\nImplemented for arm32 and arm64. TODO: Consider implementing on x86.\n\nBug: 32638713\nBug: 29516974\n\nTest: test-art-host + run ritzperf\nChange-Id: I527ca5dc4cd43950ba43b872d0ac81e1eb5791eb\n"
    },
    {
      "commit": "3049324f4ef71b5d7a3de49bd77c75f07dbf8f3a",
      "tree": "19e2d9d5e8476bf526dd5924ef05b1d727b75f8b",
      "parents": [
        "e7b46e22c7f4f6f503501b3b2ad99113289d142b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Nov 03 13:06:52 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Nov 09 18:14:08 2016 -0800"
      },
      "message": "Make empty checkpoint work while weak ref access is disabled.\n\nFix a potential race on PushOntoMarkStack for CC by running an empty\ncheckpoint (while weak ref access is disabled).\n\nBug: 32508093\nBug: 12687968\nTest: test-art-host with CC/CMS, libartd boot with N9, Ritz EAAC.\nChange-Id: I3749bb525e7734804307ee16262355f3fc730312\n"
    },
    {
      "commit": "18f7de841fee3ca6f0c04e7caa57c3ce76b36231",
      "tree": "b1cfc982706e78b70bac215a4a7643374f5ace5e",
      "parents": [
        "83805a2c02289a4e234fa6cbbc6766fbfabbc308",
        "3f386d55f7e37eaefa828a55c8aa8c4f8788e6cf"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 06 18:24:19 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 06 18:24:19 2016 +0000"
      },
      "message": "Merge \"Allow early abort logging\""
    },
    {
      "commit": "81c6c8e6ded6d19c6196205a1b19fafa77993850",
      "tree": "c1e7fb8317e2075c437b65dce5323956a3d3a0d6",
      "parents": [
        "765dee21f34e8c191c247506cf8bc73a3c3fed36",
        "02e7f1a46d8dbb277d045182cd1fa4b058d55162"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 06 02:57:57 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 06 02:57:58 2016 +0000"
      },
      "message": "Merge \"Fix a deadlock between thread flip and suspend request.\""
    },
    {
      "commit": "3f386d55f7e37eaefa828a55c8aa8c4f8788e6cf",
      "tree": "0606c2468df283260d56efa6d10cd6ffcb28173b",
      "parents": [
        "78c6fefdb9008cb6dc9f0014d4616b457009c6c8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 05 14:12:45 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 05 18:23:58 2016 -0700"
      },
      "message": "Allow early abort logging\n\nPrint unattached threads with native stack traces for early abort.\n\nBug: 31855501\n\nTest: test-art-host -j32\nTest: thread_list_-\u003eDump in Runtime::Start.\nChange-Id: I5364625e798356c4fa1f88a8c646e374e59d93b0\n"
    },
    {
      "commit": "02e7f1a46d8dbb277d045182cd1fa4b058d55162",
      "tree": "bd14cec6d5c4a545c2b9081d72b6e1b49ec7ef1e",
      "parents": [
        "d1224dce59eb0019507e41da5e10f12dda66bee4"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Oct 03 15:32:01 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Oct 05 17:52:29 2016 -0700"
      },
      "message": "Fix a deadlock between thread flip and suspend request.\n\nSee 31683379#9 for the deadlock scenario.\n\nMake ModifySuspendCount(+1) retry if the thread flip function is set.\n\nBug: 31683379\nBug: 12687968\nTest: test-art, N9 libartd boot, Ritz EAAC with CC.\nTest: 129-GetThreadId with gcstress and CC.\nChange-Id: Id5cdfcd90a08a2ff497f9f0e2842fa4c613549bc\n"
    },
    {
      "commit": "0795f23920ee9aabf28e45c63cd592dcccf00216",
      "tree": "ff3f880c5e84f3316532b47d0e9a7729ade848ac",
      "parents": [
        "d1224dce59eb0019507e41da5e10f12dda66bee4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 27 18:43:30 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 29 17:31:09 2016 -0700"
      },
      "message": "Clean up ScopedThreadStateChange to use ObjPtr\n\nAlso fixed inclusion of -inl.h files in .h files by adding\nscoped_object_access-inl.h and scoped_fast_natvie_object_access-inl.h\n\nChanged AddLocalReference / Decode to use ObjPtr.\n\nChanged libartbenchmark to be debug to avoid linkage errors.\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I4d2e160483a29d21e1e0e440585ed328b9811483\n"
    },
    {
      "commit": "b737745c79cbfa4fb3f9dfcb4560c5179f94851b",
      "tree": "28470f0ac6af58402ea1c43070cded51a27ed58e",
      "parents": [
        "05ce52b406dcf6b9a24287d14f0e611211e0db3d",
        "15af34cc172d9ae652da35a864190585cb6717a6"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 27 23:53:08 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 27 23:53:08 2016 +0000"
      },
      "message": "Merge \"Fix a CC deadlock in 129-ThreadGetId.\""
    },
    {
      "commit": "15af34cc172d9ae652da35a864190585cb6717a6",
      "tree": "bdf02e7dc6f0edaafff3c4164e2b1bdf2791d08a",
      "parents": [
        "35505bfe62f667cc84549b4ded81818d5ea2447e"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Sep 26 16:56:24 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Sep 27 10:19:12 2016 -0700"
      },
      "message": "Fix a CC deadlock in 129-ThreadGetId.\n\nGC should consider a thread as \"waiting for GC thread flip\" or\n\"transitioning to runnable\" only if its suspend count is 1.\n\nSee 31683379#7 for the deadlock scenario.\n\nBug: 31683379\nBug: 12687968\nTest: test-art with CC and gcstress, N9 libartd boot, Ritz EAAC.\nChange-Id: Icd2548bd6d9a4f8d7b54ed20150a4801af9e26a3\n"
    },
    {
      "commit": "d6e54bbc09595465309aa7909b7a3965defe4419",
      "tree": "9c12c8a0192119725e8659f593704bc416b222e0",
      "parents": [
        "a4850b0fa18c8b92dd5c20c166856cfe87aec72f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 26 14:07:57 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 26 14:07:57 2016 -0700"
      },
      "message": "ART: Fix nits\n\nFollow-up to commit 3fec9ac0d5af1358d216eb2fdc2000ec0205f3f0.\n\nBug: 31338270\nTest: m test-art-host\nChange-Id: Ia50f450bef144167b946224c26242c529302996e\n"
    },
    {
      "commit": "3fec9ac0d5af1358d216eb2fdc2000ec0205f3f0",
      "tree": "f38d8d8aae51f53e7ee6b474f47597b784fc2316",
      "parents": [
        "0cfe19af3b7395658210ea6044a65c9811962a7a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 13 10:47:28 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 26 10:59:22 2016 -0700"
      },
      "message": "ART: Use libbase logging\n\nMove most of our logging infrastructure over to system/core/base.\nRetain VLOG.\n\nUsing unified Android infrastructure has two main advantages. First,\nit reduces the complexity/maintenance burden in ART. Second, it\nallows to detach logging for the cases where we do not want or need\na runtime, e.g., dexdump, the disassembler, etc. As a part of the\nlatter, libbase is also supported for all hosts (including Windows).\n\nFrom a developer viewpoint, there are minor behavior changes for the\nLOG statements (see above), but otherwise usage is the same. Explicit\nseverity enum items are in the android::base namespace now.\n\nBug: 31338270\nTest: m test-art-host\nChange-Id: I5abcb2f45f5b03d49951874c48544f72a283a91b\n"
    },
    {
      "commit": "febd0cf9b5070ecc54ba433b951b65e14a54ccde",
      "tree": "75d96af58e255b442a45e2fa611e62851a1dc0ce",
      "parents": [
        "26ead4975e1752e8ae2f5ed6fda73876c4f9ff59"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Sep 14 19:31:25 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Sep 15 18:00:09 2016 -0700"
      },
      "message": "Fix a deadlock in the CC collector.\n\nFix a deadlock between CC GC disabling system weaks and thread attach.\n\nSee 31500969#2 for more details.\n\nBug: 31500969\nBug: 12687968\nTest: test-art-host with CC. N9 libartd boot. Ritz EAAC.\nChange-Id: Ic9a8bfb1c636643a03f4580b811fe890273576b6\n"
    },
    {
      "commit": "7e6df6e5fb9d3bfbef873d0cf006141d1fcf7d5e",
      "tree": "0a333e6c159e37a51907b71efb8ad2a7fb49b997",
      "parents": [
        "af2f2b90fdb5da2dbf51875e94d976169a76ebdd",
        "0b10387ced51d8ac1495fabe646c570fb1c378a4"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Aug 22 21:13:36 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Aug 22 21:13:36 2016 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Improve the thread flip.\"\"\"\nam: 0b10387ced\n\nChange-Id: I4695d621868558df12e072bf7055a9f78e752b58\n"
    },
    {
      "commit": "ee23582af60b36f982de2ad16f485a61f35ae817",
      "tree": "ae35b6885b345e210c66acdd992103e345202131",
      "parents": [
        "bf042503dc2c2d328a6331baf33697a7d06acccf"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Aug 19 17:03:27 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Aug 22 11:33:58 2016 -0700"
      },
      "message": "Revert \"Revert \"Improve the thread flip.\"\"\n\nThis reverts commit db3204f87c3f7c4de89762ce9e8502a9dc25c2d8.\n\nImprove the thread flip.\n\n- In addition to the threads that are suspended in FullSuspendCheck(),\n  prioritize the resume of threads that are blocking for the thread\n  flip at the JNI critical section entry and threads are about to\n  transition to runnable (eg. blocking at the SOA entry from JNI).\n- Shorten the length of the thread flip critical\n  section (ThreadFlipBegin/End).\n- Add some systrace scopes.\n- Add a read barrier for the locked objects during the thread dump in\n  case the thread is in the middle of flipping.\n\nBug: 30980189\nBug: 29517059\nBug: 12687968\nTest: test-art-host, Ritz EAAC, N9 libartd boot\nChange-Id: I3a903c47c0fcc746664ec376cc31dee8af3c3ecb\n"
    },
    {
      "commit": "ec70e9623e0063807d35357d25f8a6de92e85a62",
      "tree": "b59d429aaea8eb01458e5ffdebbabefd3b22dc62",
      "parents": [
        "bbcb1f7d7a52798d3b93ac7b50dba5e6083d5dc3",
        "bf042503dc2c2d328a6331baf33697a7d06acccf"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Aug 19 22:18:36 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Aug 19 22:18:36 2016 +0000"
      },
      "message": "Merge \"Revert \"Improve the thread flip.\"\"\nam: bf042503dc\n\nChange-Id: I12000152e9c2752b64d75297328f9521bb26b56a\n"
    },
    {
      "commit": "bf042503dc2c2d328a6331baf33697a7d06acccf",
      "tree": "160ccff4ec3a0c00c0b31fa382ae0ebfd9349b1b",
      "parents": [
        "7a687680e2127d351bbdb3b301ec5d27b68c7d14",
        "db3204f87c3f7c4de89762ce9e8502a9dc25c2d8"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Aug 19 22:12:40 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 19 22:12:40 2016 +0000"
      },
      "message": "Merge \"Revert \"Improve the thread flip.\"\""
    },
    {
      "commit": "db3204f87c3f7c4de89762ce9e8502a9dc25c2d8",
      "tree": "abb3aa17279c6a9edc9dd1c0691738a7f7c69a10",
      "parents": [
        "e61e6fdd404b8f04bd33fc3ea49e38e92e31ad69"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Aug 19 17:56:11 2016 +0000"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Aug 19 17:56:11 2016 +0000"
      },
      "message": "Revert \"Improve the thread flip.\"\n\nThis reverts commit e61e6fdd404b8f04bd33fc3ea49e38e92e31ad69.\n\nThreadStress failing.\n\nBug: 29517059\nBug: 12687968\nChange-Id: I0ee8ef04f77c5f9378e4bd21c5dedb4e435a2dc6\n"
    },
    {
      "commit": "0fcddda9e6ff19212debe6aaa04a8f87b92fcd69",
      "tree": "d7600fd09e6f0814a72a3d798936b3a22515a533",
      "parents": [
        "9ffb2dbdc3b2df0e36921bd3506c67d189ea2720",
        "f606c3a687e3eae94296ba74d2d820b6e37692ff"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Aug 19 01:36:35 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Aug 19 01:36:35 2016 +0000"
      },
      "message": "Merge \"Improve the thread flip.\"\nam: f606c3a687\n\nChange-Id: I93770b75a2d9e3ae3f3d53f37985d031425efe98\n"
    },
    {
      "commit": "f606c3a687e3eae94296ba74d2d820b6e37692ff",
      "tree": "dabcc702018af666b912dee5057ee51ce9e9b13a",
      "parents": [
        "96954301ee5b6603a4423854d02d87b28b6f4721",
        "e61e6fdd404b8f04bd33fc3ea49e38e92e31ad69"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Aug 19 01:29:50 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 19 01:29:51 2016 +0000"
      },
      "message": "Merge \"Improve the thread flip.\""
    },
    {
      "commit": "e61e6fdd404b8f04bd33fc3ea49e38e92e31ad69",
      "tree": "a7d97c2a67dc1f8337f002a6748f50c9d32e303e",
      "parents": [
        "d16ae7fe70d74091778e5952b7920df14866287f"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Aug 02 16:03:06 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Aug 17 20:24:46 2016 -0700"
      },
      "message": "Improve the thread flip.\n\n- In addition to the threads that are suspended in FullSuspendCheck(),\n  prioritize the resume of threads that are blocking for the thread\n  flip at the JNI critical section entry and threads are about to\n  transition to runnable (eg. blocking at the SOA entry from JNI).\n- Shorten the length of the thread flip critical\n  section (ThreadFlipBegin/End).\n- Add some systrace scopes.\n\nBug: 29517059\nBug: 12687968\nTest: test-art-host, Ritz EAAC, N9 libartd boot.\nChange-Id: Idecec9936ae432c23d5f83321ba13339852018df\n"
    },
    {
      "commit": "db8309bf8ac4e9a5aa4d4cc9d0335779a0b9b27b",
      "tree": "a49bc42e25ff22059bb37702da5ee1046fb9d80e",
      "parents": [
        "5637c8569d9ed874475c2ec612d3a566ba1654f0",
        "c10ad423024432df36f6360eafca8332d07b946a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Aug 06 02:59:06 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Aug 06 02:59:06 2016 +0000"
      },
      "message": "Merge \"ART: Factor out native stack dumping\"\nam: c10ad42302\n\nChange-Id: I6d19b60d96f6a795f728f9ee2be20f8f459c4421\n"
    },
    {
      "commit": "5dd44d0da7999ab62f09a1bf03345280811736d4",
      "tree": "18dc0029caf5791b0bf831dcc6e38f623fe14eb4",
      "parents": [
        "20b975cc5c5a1f4e6f0a8e525b5d2e63abc413df"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 02 17:20:03 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Aug 04 18:19:02 2016 -0700"
      },
      "message": "ART: Factor out native stack dumping\n\nMove DumpNativeStack and DumpKernelStack into a new file to keep\nconcerns separated. Clean up the file.\n\nIn preparation for modifications to how we use addr2line.\n\nBug: 30351473\nTest: m test-art-host\nTest: manual host testing with a test that times out\nChange-Id: I02d5645952fe94fd8e73bcf0522721547f6cef66\n"
    },
    {
      "commit": "79d44a96da0c741777b36be5c06eca5b8e357c3a",
      "tree": "35e9d4fa0cf1ab3131f425772105de4f6fe2a184",
      "parents": [
        "25c522cfeab396f760d44754034611029097c263",
        "94aaec95445ac06ed5ec065a7e21ddd752652cee"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 06 12:20:11 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jul 06 12:20:11 2016 +0000"
      },
      "message": "Merge \\\"Expect spurious wake-up from futex(2)/FUTEX_WAIT call.\\\"\nam: 94aaec9544\n\nChange-Id: Ib4d8108456da7b765ad5a3a081d798f9917d7b73\n"
    },
    {
      "commit": "d778cd68c5d093c2fb95f91608deb36fea8e8bad",
      "tree": "1e064bbc8743fadda81f6bae332aac6104c36846",
      "parents": [
        "74c0d1bb67f9c6ee8306f0318ab7251d56dc99d6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 05 17:29:55 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 05 17:55:07 2016 +0100"
      },
      "message": "Expect spurious wake-up from futex(2)/FUTEX_WAIT call.\n\nTest: Run standard ART test suite.\nBug: 27913630\nChange-Id: I742544f7a0a7f896e47293d209a874782577e971\n"
    },
    {
      "commit": "bf3cdef5800f02c64b692d671f526c1ed0c65280",
      "tree": "6f0ffc6e7f649afd33eeda984e1d752b8dd9d6cb",
      "parents": [
        "d14ac1d521d9c4dc0969e7056c22f241c419fc52",
        "bbcf0728f0ff051ff549df3c7153e179cb516593"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 21 11:26:00 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 21 11:26:00 2016 +0000"
      },
      "message": "Merge \\\"Release the thread_list lock while waiting for daemons.\\\"\nam: bbcf0728f0\n\nChange-Id: Icf9b891a9efe2c7108f8b2a37c44f58b039b57b8\n"
    },
    {
      "commit": "aa45daaddee752fcc7f1e5b0e207748bc6bed0a4",
      "tree": "7274a3ca9564bb1fa6269a9ff82c22794c40c3ea",
      "parents": [
        "34cfc661a5f291b1af710a90c65d846b6b43d30e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 20 15:58:32 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 21 10:41:49 2016 +0100"
      },
      "message": "Release the thread_list lock while waiting for daemons.\n\nDaemons might be in a state where they are actually waiting for\nit (for example Thread.isInterrupted). If the shutdown thread\ndoesn\u0027t release the lock, such daemon cannot make progress.\n\nbug:27353286\nChange-Id: Ib7f4c7d1b56d73a829d01d5bfc0ab663fbb80b46\n"
    },
    {
      "commit": "696bb07286fa5a4d71e941a13111b345b3706193",
      "tree": "126a885ddceef4d96bad706fe305c31056ae636e",
      "parents": [
        "9a648c3db1c95c055058cad5a843b74c9a3bd793",
        "93f26bed246c352522ff2c3ea8a5e08093de16be"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jun 15 02:44:42 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jun 15 02:44:42 2016 +0000"
      },
      "message": "Merge \\\"Visit invalid roots of only suspended threads\\\"\nam: 93f26bed24\n\nChange-Id: Ibb58c2a33ea756b777229b1cc9d67d18d6c18e87\n"
    },
    {
      "commit": "f8a86b9ecefecae8bc0e456d540dae115249fdb6",
      "tree": "a0621285655b30bba6e13cbd6d3b65d85f1d20cc",
      "parents": [
        "336f697941f2efd1d9ab9f5d45cc31e24e79b1b9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 14 17:08:47 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 14 17:58:29 2016 -0700"
      },
      "message": "Visit invalid roots of only suspended threads\n\nSince this always happens with suspended threads or self, you can\njust visit these threads and do not require a suspend all. This\nwill not miss any roots if the caller was marking a thread root.\n\nFixes issues like transitioning to suspended and back blocking on a\nthread suspension request from another thread. This could cause\ndeadlocks previously.\n\nBug: 29062271\n\nChange-Id: I2fef149387aacf0cdc9a773d4f172c42fa53e4dc\n"
    },
    {
      "commit": "d31f207a1230e332e45679b1fc6c74eead806b27",
      "tree": "c1194d322b52f4c2926f0c0b91f3f4c168abc20f",
      "parents": [
        "bda915d9e3cc186000d3ee0486717e997370421f",
        "a3e8fc3aabc122dc4a324f15925741dccda2641c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 14 00:55:46 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 14 00:55:46 2016 +0000"
      },
      "message": "ART: Turn off unattached thread dumping\nam: a3e8fc3aab\n\nChange-Id: Ia9a47d46603b373cf8fc1b823de4edd2bcd55259\n"
    },
    {
      "commit": "a3e8fc3aabc122dc4a324f15925741dccda2641c",
      "tree": "50a102ebb1f19ed5195fda779b3ace0954dc77cf",
      "parents": [
        "f7d994622aabcc689f62253a9253e0c67d9e787e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 13 16:15:33 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 13 16:15:33 2016 -0700"
      },
      "message": "ART: Turn off unattached thread dumping\n\nMay be responsible for lack of ANR dumps in some situations.\n\nBug: 29248079\nChange-Id: Ib742c063b1d77216eddfbf4392d17d024e028bf8\n"
    },
    {
      "commit": "e99f53203904c23a26e53ca1bf6a4e45814146fe",
      "tree": "88142212532717ef4e2435420493eeab02d1eb11",
      "parents": [
        "4811e726711e42781e7b9d56763588cef796e2f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 10 17:04:20 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 10 17:52:36 2016 -0700"
      },
      "message": "Use ScopedObjectAccess in ThreadList::Dump\n\nPrevent deadlocks if two different threads are calling Dump at the\nsame time:\n\nThread 1: Requests thread 2 to suspend\nThread 2: Requests thread 1 to suspend\nBoth threads are suspended and blocked on ScopedObjectAccess in\nthread dumping.\n\nAdded to suspend all stress, reduced thread count to 4 temporarily\nsince this is the maximum number of simultaneous checkpoints.\n\nBug: 28988206\n\nChange-Id: I9e4b8391ebad0bca0e42a03819c58c99ddba6b35\n"
    },
    {
      "commit": "bb661c0f0cb72d4bbfc2e251f6ded6949a713292",
      "tree": "4fe7e66f3385b1955934d3ec6f02e00bde6e13b8",
      "parents": [
        "f7cda8088ec57ab1422f85f08df78e217a9f7094"
      ],
      "author": {
        "name": "Bilyan Borisov",
        "email": "bilyan.borisov@linaro.org",
        "time": "Mon Apr 04 16:27:32 2016 +0100"
      },
      "committer": {
        "name": "Bilyan Borisov",
        "email": "bilyan.borisov@linaro.org",
        "time": "Fri Apr 22 13:33:30 2016 +0100"
      },
      "message": "Refactor use of __ANDROID__ macro\n\nWe use the __ANDROID__ macro, which is provided by the toolchain, in\nnumerous places. This patch refactors the usage of this by defining a\nnew macro, ART_TARGET_ANDROID, that is being passed during build to\nART_TARGET_CFLAGS in Android.common_build.mk on the same line as\nART_TARGET. The codebase currently assumes that the existence of the\n__ANDROID__ macro implies that we are compiling art for an android\ntarget device. This is because, currently, target builds are compiled\nwith target toolchains that provide the macro, while host toolchains\ndo not.  With this change this assumption is still preserved. However,\nin a future patch we will add the ability to compile art for a linux\ntarget, and in that case the ART_TARGET_ANDROID macro won\u0027t be passed\nanymore.\n\nChange-Id:  I1f3a811aa735c87087d812da27fc6b08f01bad51\n"
    },
    {
      "commit": "61b3cd45c5e3a5c24f7ccce94843a718375f9b7a",
      "tree": "fc71e27e0ddf6be1f672b69524b7ee978fd9d29c",
      "parents": [
        "74b3c8f3850c2e4a7b17e9821ad78b59e6f8e047"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 18 11:43:29 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 18 15:29:53 2016 -0700"
      },
      "message": "Prevent holding stale Thread pointers\n\nIt is only really safe to hold non-self Thread* if you hold the\nthread list lock. Changed a few places to use thread ids instead\nof Thread.\n\nBug: 28223501\n\n(cherry picked from commit 81c170fede9af9174aba71428334ac8f366a4b4f)\n\nChange-Id: I15e50b699303a5c3739e4d19c153dd306e2ee504\n"
    },
    {
      "commit": "81c170fede9af9174aba71428334ac8f366a4b4f",
      "tree": "ea508c192bc79dbe76d41eb32959280794f73e37",
      "parents": [
        "ad0b769e15eeb62963d543811a960deb6f309adf"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 18 11:43:29 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 18 14:25:18 2016 -0700"
      },
      "message": "Prevent holding stale Thread pointers\n\nIt is only really safe to hold non-self Thread* if you hold the\nthread list lock. Changed a few places to use thread ids instead\nof Thread.\n\nBug: 28223501\n\nChange-Id: Ie58bd755bf1dcf3c1f37da79ba0b2507f77574dd\n"
    },
    {
      "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"
    }
  ],
  "next": "9db831acffa509b2e46c1d63fe25650d3bedd415"
}
