)]}'
{
  "log": [
    {
      "commit": "0d290721a8d63d5e0d38a64d3ecf922a91becb10",
      "tree": "02daf3bb3ae703da0a9b99a307f8bbfb2c03c748",
      "parents": [
        "c63d9672264e894d8d409e8d582b4e086b26abca"
      ],
      "author": {
        "name": "wangguibo",
        "email": "wangguibo@xiaomi.com",
        "time": "Sat Apr 24 11:27:06 2021 +0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon May 17 18:19:16 2021 +0000"
      },
      "message": "Dump java backtrace when contending lock too long time.\n\nIt’s easy to cause a problem when execute time-consuming work inside\na synchronized method/block. Previously, we use \"dvm_lock_sample\" in\nevent log to help us look into.\n\nBut it\u0027s always after the event, \"dvm_lock_sample\" is printed after the\nowner thread exited the critical section, we don\u0027t know more details\nthat which statement get stuck or more time-consuming.\n\nThis implementation provides a lot more information about what the\ncontending thread is doing. when a thread contend for a long time,\nwe will print backtrack which thread holding the lock.\nMaybe many threads waiting this lock, those threads will request\nprinting backtrack many times, which is helpful for finding and\nlocating problems.\n\nThis mechanism is only suitable for very long wait times, not lots of\nshort wait times.\nThis feature is heavyweight, it\u0027s not enabled by default. we can\nturn on by \"-XX:MonitorTimeoutEnable\" in AndroidRuntime::startVm.\n\nBug:140968481\nTest: Manually check contention log messages.\n\nSigned-off-by: wangguibo \u003cwangguibo@xiaomi.com\u003e\nChange-Id: I29784d11355ae3c581723254848a87cd80e71456\n"
    },
    {
      "commit": "0613605645846299f61d52e8a6ffd58f6ce04063",
      "tree": "a824b61d1f8b01b9d907b9df9ea51757dc98ed65",
      "parents": [
        "11943fce963dedeaa9b2d261afa7c30f4bcc0b81"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Mon Mar 01 09:46:20 2021 -0800"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue Mar 02 18:41:48 2021 +0000"
      },
      "message": "Replace histogram in CumulativeLogger with average\n\nHistograms has non-trivial memory consumption and hence using it in\nCumulativeLogger to track time spent in each function results in\nsignificant private dirty memory (see the bug). The detailed stats that\nhistograms provide aren\u0027t really needed. So, replacing with averages.\n\nBug: 179396782\nTest: art/test/testrunner/testrunner.py --host --runtime-option\u003d-XX:DumpGCPerformanceOnShutdown\nChange-Id: I9ed48e9ced124f2a02bf0411e188f87504db5422\n"
    },
    {
      "commit": "b9b7d91f5ceb0b738e1774992fd6fe205c6091e9",
      "tree": "06210044d3f66a0eb72e491ba9effc13bb827ced",
      "parents": [
        "4c3ade67c470543562a0029e39b576954a807321"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Feb 24 09:24:47 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 25 12:12:16 2021 +0000"
      },
      "message": "Revert \"Lazily allocate DexCache arrays.\"\n\nThis reverts commit 1214319d27e7fb4c4ff00b39799df6f15288098a.\n\nReason for revert: Post-submit fails\nBug: b/181097963\nTest: TH\n\nChange-Id: I9fd21140f1703d0020458b786f48bd39889a9948\n"
    },
    {
      "commit": "1214319d27e7fb4c4ff00b39799df6f15288098a",
      "tree": "8708943822a634322bd9790c4d008210e44b3ddb",
      "parents": [
        "b7cb691fb8da124e8a6276a5a7fee47dd0aaa338"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Feb 16 14:06:31 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Feb 23 15:24:27 2021 +0000"
      },
      "message": "Lazily allocate DexCache arrays.\n\nWe rarely need the DexCache for compiled code.\nDelay the allocation in hope we never need it.\n\nThis reduces DexCache memory usage by ~25% at startup.\n\nTest: m test-art-host-gtest\nTest: test.py -r -b --host\nChange-Id: I680a59c905c2b821ee954e4b32abd5d24876bd11\n"
    },
    {
      "commit": "a1cc540761ba475fc49704b0cc14d9de1987238e",
      "tree": "287e3e4ee6c29700399d650363b9ae5fa1035d7a",
      "parents": [
        "15489fb20f8863052daef5e9e16190ef1cbe6735"
      ],
      "author": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Fri Dec 04 23:37:11 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 07 20:28:34 2020 +0000"
      },
      "message": "Revert^2 \"Add MessageQueue for cross-thread communication\"\n\nThis reverts commit c7edde06dc2cfb90114898e8de82e0e1287c2885.\n\nReason for revert: fixing bugs.\n\nThere were two issues. The first was a logic error in\nMessageQueueTest::ReceiveInOrder.  The test would allow any message to\nbe replaced by a timeout message, but then the sequence would be out of\nsync. The change now explicitly advances the message pointer, which\nmeans the timeout message does not effectively replace an expected\nmessage.\n\nThe seccond issue was one where MessageQueue may try to call\nConditionVariable::TimedWait with a negative timeout if the deadline had\nalready passed, which fails with an EINVAL error during the call to\nfutex. The code in MessageQueue::ReceiveMessage now checks for negative\ntimeouts before calling TimedWait.\n\nTest: m test-art-host-gtest-art_runtime_tests\nBug: 174652565\nChange-Id: I107af849e2a01727719f7662a7685d989b42d176\n"
    },
    {
      "commit": "c7edde06dc2cfb90114898e8de82e0e1287c2885",
      "tree": "1f207ed4fb46dc71c7546b2a5222d2527119d14c",
      "parents": [
        "a3148d24c257b110a71114725d7d0d33c60bbc66"
      ],
      "author": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Fri Dec 04 18:51:18 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 04 23:31:43 2020 +0000"
      },
      "message": "Revert \"Add MessageQueue for cross-thread communication\"\n\nThis reverts commit de60ef3f91af06a3b8ef24f4bab5c547dc65e10d.\n\nReason for revert: bot failures - http://b/174652565\n\nChange-Id: I23dc6d275ce04a8cd78c92728a8d33f66979e481\n"
    },
    {
      "commit": "de60ef3f91af06a3b8ef24f4bab5c547dc65e10d",
      "tree": "b38a5e073fc45c314deafd3301b233af4e0915f5",
      "parents": [
        "df105da771446bf686de567b36d9d982dc641ad5"
      ],
      "author": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Thu Nov 19 15:51:10 2020 -0800"
      },
      "committer": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Tue Dec 01 17:06:45 2020 +0000"
      },
      "message": "Add MessageQueue for cross-thread communication\n\nThis adds a message queue that allows for sending messages of several\ndifferent types between threads. This can simplify communication with\nthreads that need to do periodic background work driven by certain\nevents (including timeouts). One example will be the metrics reporting\nbackground thread.\n\nSee the MessageQueue class comments for examples of use.\n\nTest: m test-art-host-gtest-art_runtime_tests\nChange-Id: I831c79a4115c6b9540c2ef1801f2fa894ab96dc9\n"
    },
    {
      "commit": "26ab270882523210c44bf156211283936471bbf6",
      "tree": "3ae1cb1d37a5e4facc39443f3ccbe76f3b486460",
      "parents": [
        "5880c77e9153b953952507cb924ce3ee8511e084"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jul 29 09:54:10 2020 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jul 29 09:57:28 2020 +0100"
      },
      "message": "A few more inclusive language updates based on newer wordlist\n\nBased on:\n  https://source.android.com/setup/contribute/respectful-code\n\n#inclusivefixit\n\nBug: 161336379\nBug: 161896447\nTest: art/test.py --host --64\nChange-Id: I7e6362556136ce1a3085fffae7598104fa5bc56a\n"
    },
    {
      "commit": "6aaa49dd4a3467e8d05aee4a1de9753e896ee96b",
      "tree": "593e79da914087e991ad0a6d0421962806485e04",
      "parents": [
        "72e27b0b29fd1bdea6747f62c5bd865d26a0bdcd"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jul 28 15:53:04 2020 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jul 28 16:40:36 2020 +0000"
      },
      "message": "Inclusive language fixes\n\nBased on:\n  https://source.android.com/setup/contribute/respectful-code\n\n#inclusivefixit\n\nBug: 161336379\nBug: 161896447\nTest: art/test.py --host --64\nChange-Id: I02c96aa477c4be6af8384222f1f111cc7ae1eeac\n"
    },
    {
      "commit": "2d53643ca0e05e7c67894aa75eba899acbb9f287",
      "tree": "39299475c04303312f527bc00355bd9fd7a3fad8",
      "parents": [
        "cefebc86af30522bf79d2a89a2bcf96f7f970ecb"
      ],
      "author": {
        "name": "Ian Pedowitz",
        "email": "ijpedowitz@google.com",
        "time": "Wed Jul 22 14:33:00 2020 -0700"
      },
      "committer": {
        "name": "Ian Pedowitz",
        "email": "ijpedowitz@google.com",
        "time": "Fri Jul 24 00:41:56 2020 +0000"
      },
      "message": "Update language to comply with Android’s inclusive language guidance\n\nSee https://source.android.com/setup/contribute/respectful-code for\nreference\n\nBug: 161896447\nBug: 161850439\nBug: 161336379\nTest: m -j checkbuild cts docs tests\nChange-Id: I32d869c274a5d9a3dac63221e25874fe685d38c4\n"
    },
    {
      "commit": "aacf977a3b3af644a7e2eb58d8e56a23d1f3d215",
      "tree": "6a595bf88f3124e61c826bcd72520dd406664f1e",
      "parents": [
        "4ef451aecd4008ccee2ebf6136a70ed6a5c14717"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jul 22 21:51:00 2020 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 23 13:18:06 2020 +0000"
      },
      "message": "Reword some comments to be more inclusive\n\nAlso corrects a typo s/He/We/.\n\nBug: 161336379\nBug: 161850439\nBug: 161896447\nTest: m\nChange-Id: Ie8e37310eb777b7ee41a13f8894e99795c29a98a\n"
    },
    {
      "commit": "d4e6a992ad3b08585cbe50b7b55d23833ad32727",
      "tree": "ca161920b122403ca36ca323529ecc5ca5824ab1",
      "parents": [
        "ea54b823a3a02f65c865e11bbbccb327a273c039"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Jul 13 10:49:13 2020 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Jul 13 10:49:13 2020 -0700"
      },
      "message": "Invoke futex wait with correct value\n\nIf we were woken up early, Mutex::ExclusiveLock() would mistakenly\nretry the wait with the original state_and_contenders value,\nin spite of the fact that the contenders part might have changed.\nThis could turn a mutex wait loop into a spin loop, causing\na battery issue, and an occasional livelock issue. Fix that\noversight.\n\nBug: 161005897\nTest: Treehugger\nChange-Id: Ie98ad188d0edbd9d9359954efa08d03e833f167b\n"
    },
    {
      "commit": "9974e3cdc1564edc3143b90d7bb2a416f1f887e7",
      "tree": "4f9746e6b237b2a17cc1e2543a141817d4946c19",
      "parents": [
        "2d19902c3d140c7b9b1d7ae905bd1023a4e649a1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 10 16:27:06 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 11 10:06:12 2020 +0000"
      },
      "message": "Clean up generated operator\u003c\u003c(os, enum).\n\nPass enums by value instead of const reference.\n\nDo not generate operator\u003c\u003c sources for headers that have no\nenums or no declarations of operator\u003c\u003c. Do not define the\noperator\u003c\u003c for flag enums; these were unused anyway.\n\nAdd generated operator\u003c\u003c for some enums in nodes.h . Change\nthe operator\u003c\u003c for ComparisonBias so that the graph\nvisualizer can use it but do not use the generated\noperator\u003c\u003c yet as that would require changing checker tests.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: Ifd4c455c2fa921a9668c966a13068d43b9c6e173\n"
    },
    {
      "commit": "41b605c5ad4b06ea127ac56c6e3a4c92e8913efd",
      "tree": "f7b28eb11051f3faada99c11dc594cccd34a5786",
      "parents": [
        "30b38f8d01cdb4c80092638f23c61d73e0d287f4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 12 10:52:22 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 14 12:01:58 2020 +0000"
      },
      "message": "Remove MIPS support from runtime/.\n\nTest: aosp_taimen-userdebug boots.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 147346243\nChange-Id: If1fc8be94caa69f734438d7a1f4c715addfd8876\n"
    },
    {
      "commit": "e0c6d439271c94feb3fb38728d1b4743a7ed0b9e",
      "tree": "c7f9176cacb9e362d0dd3bbeabeca8b42e42d184",
      "parents": [
        "721e40283793649b4750c05da4fe972bd372f7f9"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 22 22:04:20 2020 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 22 22:04:20 2020 +0000"
      },
      "message": "Revert \"Fix stack-walking race\"\n\nThis reverts commit 721e40283793649b4750c05da4fe972bd372f7f9.\n\nReason for revert: Wanted more discussion.\n\nTest: none\n\nBug: 72608560\nBug: 29259363\nBug: 148166031\nChange-Id: Id0fb201018a0d0bdca11d51ec156a41d6d7fe4ae\n"
    },
    {
      "commit": "721e40283793649b4750c05da4fe972bd372f7f9",
      "tree": "9af2c2c583900e9a35c6adf7fef277d0221c0571",
      "parents": [
        "df7e5b836e78ab38101dde45399c8de51df4042e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 14 14:45:40 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 22 21:56:30 2020 +0000"
      },
      "message": "Fix stack-walking race\n\nDuring stack walking it was possible for a walking thread to race with\nthe InstrumentationInstallStack. In this case the stack changes made\nby InstrumentationInstallStack could cause the other thread to\nincorrectly parse the stack data-structures, leading to\nfailures/crashes.\n\nTo fix this we increment an ID whenever instrumentation changes the\ninstrumentation stack. Other stack-walkers then check this id and\nrestart whenever it changes. Note that although the stack-walk\nrestarts we keep track of how many java frames we\u0027ve visited already\nand refrain from calling VisitFrame until we are at the same position\nagain. This means that as far as the Visitor writers are concerned the\nstack-walk is only done once, just like always.\n\nAdded a test (2011) that forces the race to occur.\n\nAlso Disabled Dex2oatSwapUseTest#CheckSwapUsage. It seems that the\nincrease in Thread* size has caused it to fail. Disable while we\ninvestigate. See b/29259363\n\nBug: 72608560\nBug: 29259363\nBug: 148166031\nTest: ./test.py --host\nTest: ./test/run-test --host --dev --runtime-option -verbose:deopt,plugin --prebuild --compact-dex-level fast --jit --no-relocate --create-runner --runtime-option -Xcheck:jni 1965-get-set-local-primitive-no-tables\n      parallel_run.py\nChange-Id: I77349dfc6fa860b7f007dee485e9fea1d8658090\n"
    },
    {
      "commit": "65c18a21e7cb0d48327788df498f15ae195e9e3c",
      "tree": "ba49c1f07e7cd2bc6d9ffbafc184bcad85e9ce45",
      "parents": [
        "c4d13ae39ec6f4b6b76b152818516081beb6bb56"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 23:37:13 2020 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Jan 07 17:40:19 2020 +0000"
      },
      "message": "Revert^4 \"Add spin loop to mutex, overhaul monitor\"\n\nThis reverts commit ead89ef62768faa06fedd279b86bccbed1464673.\n\nPS1 is identical to Revert^2.\n\nThis fixes a shutdown issue caused by prematurely hanging when we\nblock while trying to acquire system mutexes during shutdown.\n\nOnly refuse to wake up after shutdown is well under way.\n\nBug: 140590186\nBug: 121302864\nTest: Build and boot AOSP.\nTest: art/test/testrunner/testrunner.py --host -b -t 1932-monitor-events-misc\nTest: art/test/testrunner/testrunner.py --host -b -t 004-ThreadStress\nTest: art/test/testrunner/testrunner.py --host -b -t 132-daemon-locks-shutdown\nTest: 132-daemon-locks-shutdown repeated with increased thread counts and multiple\nconcurrent tests.\n\nChange-Id: Ic19d32652a2a05c1ca843b3e9c6e29e6770262da\n"
    },
    {
      "commit": "ead89ef62768faa06fedd279b86bccbed1464673",
      "tree": "27e3bef919a0775f45c0dfc08b6a26d7688e8a98",
      "parents": [
        "8d94dddfd60ab8122b0abb1a0d90fb13d752a7b6"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 21:37:10 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 03 22:50:59 2020 +0000"
      },
      "message": "Revert^3 \"Add spin loop to mutex, overhaul monitor\"\"\n\nThis reverts commit 3d52abe40e619497b1b59cfce92c74b5a417add5.\n\nReason for revert: Causes asan build timeout; Apparently the runtime\ngoes away while we\u0027re holding a system mutex. We now sleep forever\nwithout releasing it.\n\nBug: 140590186\nBug: 121302864\nChange-Id: I9e4dcaf820815c751aa803473809955451988ebd\n"
    },
    {
      "commit": "3d52abe40e619497b1b59cfce92c74b5a417add5",
      "tree": "50c67eb9a980b1525f78e03d0941605bb9fa3887",
      "parents": [
        "eac38a141a95adc273059ba2f6ad26f073391ed3"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Nov 19 18:49:50 2019 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 19:15:21 2020 +0000"
      },
      "message": "Revert^2 \"Add spin loop to mutex, overhaul monitor\"\n\nThis reverts commit d56f7d1086b16f32c0771a41a4afb376b5fd3076.\n\nReason for revert: PS2 fixes the problems I identified.\n\nPS1 is straight revert^2 of, and thus identical to aosp/1111800.\n\nPS2 in addition:\n- Reduces the size of the test, when not modified to run as benchmark.\n- Disables the test in slow-running configurations, which timed out.\n- Stops using the mutex recursion count, and instead reintroduces\n  one at the monitor level. The plan is to eliminate the one in mutex\n  in a future CL.\n- Avoids modifying various monitor fields in suspended state.\n  MonitorInfo, deflation, etc., may look at the state of a suspended\n  thread and expect not to race. I don\u0027t think the original code had\n  this completely correct either, but PS1 made it worse.\n- Documents some aspects of the code that confused me at times.\n- Avoids dereferencing the monitor owner Thread* unless it holds the\n  thread list lock, and thus knows that the thread won\u0027t go away.\n- Stores a Thread* instead of a thread_id with the monitor owner method\n  and dex pc information used for debugging. This is required to avoid\n  extra thread list lock acquisitions, since we need to dereference the\n  owner to get the thread id.\n- Makes the thread list Contains method public, again in order to\n  support the above. (This ignores C/C++ restrictions on dangling\n  pointer use. We already rely on violating those elsewhere, and\n  the committees are trying to get their story straight about this.)\n- Causes the spin loop to give up immediately if the process is\n  shutting down. This gets us to an actual idle state sooner in that\n  case, and should hopefully mitigate the shutdown issues somewhat.\n  (We tried not spinnning in \"suspended\" state, but that reintroduced\n  some performance issues.)\n- Makes runtime shutdown code more defensive. Clear fields pointing to\n  deallocated objects. Always wait for quiescence AFTER all threads\n  are suspended.\n- Consistently checks for a runtime that\u0027s shutting down or missing\n  after waking up from a futex wait, thus avoiding touching deallocated\n  memory. I believe this was the cause of b/121302864, which PS1\n  managed to aggravate.\n- SleepForever() was a very light sleeper, waking up once a second.\n  Fix that, so the daemon threads we leak on runtime shutdown cost\n  us less.\n- Remove a data race from the \"was the runtime deleted\" logic.\n\nBug: 140590186\nBug: 121302864\nTest: Build and boot AOSP.\nTest: art/test/testrunner/testrunner.py --host -b -t 1932-monitor-events-misc\nTest: art/test/testrunner/testrunner.py --host -b -t 132-daemon-locks-shutdown\nTest: art/test/testrunner/testrunner.py --host -b -t 004-ThreadStress\n\nChange-Id: I6667c61beed2ba68c84cd4c0821fb8e21e188bbc\n"
    },
    {
      "commit": "acd7060266dac5dbbba1698df4ae086754e8a2bf",
      "tree": "b624b4daf68361ecdb08fb113940da6ad4c2cae0",
      "parents": [
        "60d9775f9a56c6c4d18706528f0a31ac3707ea2c"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Thu Dec 05 17:46:25 2019 -0800"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Dec 18 17:06:09 2019 +0000"
      },
      "message": "Update target footprint on process state switch\n\nTest: Greenday/MPTS test\nBug: 145161943\nChange-Id: I519fda7e15ca1acc68c5958ef67f1aae56c53662\n"
    },
    {
      "commit": "986914bfd60c1cace9726e9029598d72cbf279e1",
      "tree": "556e5549254e4d5b280a63451fa8673ab36fba7b",
      "parents": [
        "5697faba0e910374da285f5f848d2aaf7ee6ffec"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:12:25 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 19 17:15:48 2019 +0000"
      },
      "message": "Revert^4 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 2f8c1ac61b0c611d67badea70261c851ed19b82a.\n\nIf there were pending tasks to jit compile a method which is made\nobsolete the JIT would CHECK fail, since the newly obsolete method is\nmarked DontCompile. This didn\u0027t happen with non-structural\nredefinition since in that case the \u0027valid\u0027 ArtMethod always remains\nthe same.\n\nTo fix this we just have the JitTask check if the method it\u0027s\ncompiling is compilable and fail if it\u0027s not.\n\nReason for revert: Fixed JIT check failure.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\nBug: 144729319\nChange-Id: Ib867b2de13bb4c2978b4538a5851c647caf0e1cc\n"
    },
    {
      "commit": "d56f7d1086b16f32c0771a41a4afb376b5fd3076",
      "tree": "41e048cb90e749ffb7e6496db841d4ca80628b5b",
      "parents": [
        "9965feffb2f55ff1e6dfacd396f65e642c22b799"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Nov 19 06:03:11 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Nov 19 10:28:55 2019 +0000"
      },
      "message": "Revert \"Add spin loop to mutex, overhaul monitor\"\n\nThis reverts commit 0d508a01106746e0d8865752850f4f03bcce1e01.\n\nReason for revert: Preparing revert, in case the art/ci/host-x86_64-cdex-fast failure recurs.\n\nBug: 140590186\n\nChange-Id: I404b6ee498ff4eda73ec3b8fc4bf8e92efb2705f\n"
    },
    {
      "commit": "2f8c1ac61b0c611d67badea70261c851ed19b82a",
      "tree": "97f87c13f69d033cf3f4120af66a7c5391c2da35",
      "parents": [
        "96d8585ebb9e21fc27a59ddd4173ca62ad93c194"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:09:31 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:11:18 2019 +0000"
      },
      "message": "Revert^3 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 8ba9738d55c11dfb7f85a7de9b1d6a4e1225ad20.\n\nReason for revert: Seems to be failing with `Check failed: method-\u003eIsCompilable()`\n\nTest: None\nBug: 134162467\nBug: 144168550\nBug: 144729319\nChange-Id: Ida9228fa171ae16d803b5ad4438e233a2ed4ffb2\n"
    },
    {
      "commit": "8ba9738d55c11dfb7f85a7de9b1d6a4e1225ad20",
      "tree": "5aabe6d6af38514af0822ab9529a39f542aaa175",
      "parents": [
        "0d508a01106746e0d8865752850f4f03bcce1e01"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 18 17:52:55 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 18 20:19:43 2019 +0000"
      },
      "message": "Revert^2 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit d0e354e54da2f2e79b6fc2ff0e13d53c74976b08.\n\nWe were incorrectly continuing to use an ObjPtr over a suspend point\n(in this case a CollectGarbageInternal). This led for the ObjPtr to be\ninvalidated. Instead we should have been using a Handle (that already\nexists).\n\nReason for revert: Fixed stale ObjPtr use.\n\nTest: ./test.py --host\nTest: ./test/testrunner/run_build_test_target.py -j80 art-debug-gc\nBug: 134162467\nBug: 144168550\nBug: 144590579\nChange-Id: Ied9856a707d377e97d34c7450376caf2a0b83255\n"
    },
    {
      "commit": "0d508a01106746e0d8865752850f4f03bcce1e01",
      "tree": "727e9b6a420c3ff1206e97a9ab0369b9947cd797",
      "parents": [
        "25d536e67fc69e0413298989f1b21b6fdcece682"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Aug 30 16:14:32 2019 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Nov 18 18:06:50 2019 +0000"
      },
      "message": "Add spin loop to mutex, overhaul monitor\n\nSince Linux context switch overhead is typically larger than a\nmicrosecond, this may greatly reduce the overhead of waiting for a\nmutex that is only briefly held by another thread. Rather than going\nto sleep and having to be woken back up again, at a cost of several\nmicroseconds, we just spin, hopefully for much less than microsecond,\nuntil the mutex becomes available. It does waste some CPU cycles\nwhen spinning fails, either because the lock is held too long, or\nwe are being scheduled against the thread holding the lock. But we\nexpect those to be unlikely.\n\nWe test the lock only a few times, with pauses in between. It\u0027s\nunclear that\u0027s beneficial; we should perhaps just loop reading\nthe variable. In general, this needs further tuning.\n\nAdd a test that mutual exclusion works, which can also be run as\nlock microbenchmark.\n\nThe old monitor implementation did not benefit much from this, because\nit used mutex only as a low-level lock to protect the monitor data\nstructure. Instead use monitor_lock_ as the actual lock providing\nmutual exclusion for the monitor, i.e. hold onto it while the monitor\nis fatlocked.  Among other things, this requires that the monitor_lock_\nalways be acquired by, or explicitly on behalf of, the thread holding\nthe monitor.\n\nThis in turn makes it really hard to deflate a monitor held by another\nthread. Just stop doing that, since it was unclear whether that\u0027s\nactually beneficial.\n\nThe main advantages of the monitor change are:\n- Half the number of mutex acquisitions.\n- Easier to effectively spin.\n- No possibility of blocking while trying to release a monitor.\n\nNo longer compute owner method and dex pc values on monitor entry\nunless we\u0027re tracing. This was expensive and increased lock hold times\nsufficiently that it often made spinning ineffective.\n\nHave mutex acquisition call futex wait in a loop between updating\nwaiter count. The old way resulted in extra futex wakeups in highly\ncontended situations.\n\nConditionally disable frame size warning for Heap::PreZygoteFork().\nOtherwise the platform doesn\u0027t build with ART_USE_FUTEXES \u003d 0, which\nwe needed for testing.\n\nBased on the new test, this appears to get us about a decimal order\nof magnitude in inflated contended locking performance. Single-threaded\nor scalable applications (i.e. most) should be unaffected. But it should\nprevent applications that do encounter contention from \"falling off a\ncliff\", or at least greatly reduce the height of the cliff. And it\nshould make performance more repeatable by making it less dependent on\nwhether a monitor happens to get inflated.\n\nBug: 111835365\nBug: 140590186\nTest: Successfully built and ran monitor tests. Boots AOSP.\nTest: Build platform with ART_USE_FUTEXES \u003d 0.\nTest: Check contention messages in log after booting AOSP.\nTest: Check systrace output while partially running new test.\n\nChange-Id: Iff7457fff59efcb24e25d35a4ef71b67b8a9082a\n"
    },
    {
      "commit": "d0e354e54da2f2e79b6fc2ff0e13d53c74976b08",
      "tree": "743c595ef2cd94f89b487974e698d18c7d297330",
      "parents": [
        "c0200a984cacb6c0911d046a018cd11c7d20646b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 18 08:37:50 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 18 08:38:15 2019 +0000"
      },
      "message": "Revert \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 283bb322de84ac570b987c65a1015e2dbcbfad7c.\n\nReason for revert: Test flakes\n\nBug: 134162467\nBug: 144168550\nBug: 144590579\nChange-Id: I2259c030f03a72f6b7bcda10288bd23cb3258164\n"
    },
    {
      "commit": "283bb322de84ac570b987c65a1015e2dbcbfad7c",
      "tree": "18f5d68c78e56a2d398192c8340269a60706b7a0",
      "parents": [
        "2c5dfe16ab2b0f8fbd14dedc161eb4658a8673fc"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 29 11:15:05 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Nov 16 00:26:03 2019 +0000"
      },
      "message": "Initial support for adding virtuals with structural redefinition\n\nInitial implementation of adding virtual methods and non-static fields\nusing structural redefinition. Currently this is limited to \u0027final\u0027,\nnon-finalizable classes. These restrictions will be removed or\nloosened in the future.\n\nAll non-collected instances of the redefined class will be made\nobsolete and reallocated. This can cause significant GC load.\n\nThis feature does not work with any of the -quick opcodes and should\nonly be used with dex files that haven\u0027t undergone dex2dex\ncompilation (that is --debuggable and BCP dex files).\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\n\nChange-Id: Ia401d97395cfe498eb849a661ea9a900dfaa6da3\n"
    },
    {
      "commit": "92db59bdb2c0154a1bec0c1e70c50f5f13d462a7",
      "tree": "d4709c1bfe4e5f6a8bf15ec6c8b97e72a0200dc5",
      "parents": [
        "1b0fcf495e652cabaa8e65b8bf67284ca15f6485"
      ],
      "author": {
        "name": "Ziang Wan",
        "email": "ziangwan@google.com",
        "time": "Mon Jul 22 21:19:24 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jul 24 21:51:32 2019 +0000"
      },
      "message": "Revert \"Workaround bogus Thread Safety Analysis warning\"\n\nAlter the thread safety analysis attribute of ReaderWriterLock::AssertNotHeld\nso that it accurately expresses \"lock not held either exclusively or shared\".\n\nRe-enable Locks::mutator_lock_-\u003eAssertNotHeld runtime checks in heap.cc\nand adbconnection.cc.\n\nThis reverts commit e11d50f23dc1256ad933d209f2db8f58138f02c0.\n\nBug: 71769596\nChange-Id: I94488ad5f977b0de13a5141c54f67272a41f8b53\n"
    },
    {
      "commit": "79d6c800cd8aa1da335ea0523c391852780ac02a",
      "tree": "a77faf41d7b658709113c72d7eaaaa1ce2ded6b5",
      "parents": [
        "01fbfbebceb00b94cc54738ebf425b6c4a79211a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 27 15:50:11 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 28 14:58:17 2019 +0000"
      },
      "message": "Revert^2 \"Support using opaque JNI ids\"\n\nWe weren\u0027t handing the fact that encoding jmethodIDs could cause OOM\nexceptions in some places in reflection.cc. This could lead to\nattempting to use a null jmethodID as if it were a real id. This issue\nis fixed by the parent CL.\n\nThis reverts commit b476a29a2c.\nThis reverts commit 3b2905366c.\nThis Unreverts commit d5d645ffec.\nThis Unreverts commit 21d5994583.\n\nReason for revert: Fixed issue causing 004 debuggable flakes\nTest: ./test.py --host --jit --debuggable\nBug: 134162467\n\nChange-Id: Iece08ab299cd8a20f8382be7be6c3796858e70eb\n"
    },
    {
      "commit": "b476a29a2cda22b86fc1d96e4cc65ce36fb878af",
      "tree": "039eaee2edf5495275088d1c467e522977c6bcd6",
      "parents": [
        "3b2905366c6ee1eaba2d6477078e505e377343ec"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 07:54:48 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 08:16:04 2019 +0000"
      },
      "message": "Revert \"Support using opaque JNI ids\"\n\nThis reverts commit 21d5994583c679cd5d8573b5d35dbd659bdca2c7.\n\nBug: 134162467\n\nReason for revert: Breaks debuggable\n\nChange-Id: I9510a6ac208d392ff25ee196a1a519fecd151445\n"
    },
    {
      "commit": "21d5994583c679cd5d8573b5d35dbd659bdca2c7",
      "tree": "521906398a2f04048cc51b4f409b6a3ebc0c6ffa",
      "parents": [
        "5dfbe7ae9ed9a1a82446d32118190105a211a2d2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 19 12:58:22 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 26 20:22:39 2019 +0000"
      },
      "message": "Support using opaque JNI ids\n\nCurrently JNI ids (jmethodID \u0026  jfieldID) are created by simply\ncasting the corresponding ART structure pointer. This is great for\nsimplicity but means we are prevented from performing operations that\ncould change these pointer values. To support these use-cases add\nsupport for loading the runtime with a layer of indirection between\nthese ids and the internal art data types.\n\nCurrently the JNI id type can be toggled only by passing the new\n\u0027-Xopaque-jni-ids:{true,false}\u0027 flag during startup.\n\nThis changes the --debuggable test configuration to pass\n\u0027-Xopaque-jni-ids:true\u0027 in order to get test coverage of this feature\nusing the \u0027art-jit\u0027 configuration.\n\nTest: ./test.py --host --debuggable\nTest: ./test.py --host --debuggable --jit-on-first-use\nTest: ./test/testrunnner/run_build_test_target.py art-jit\nBug: 134162467\nChange-Id: Id8c8cb9a5b8ff18dc2f40892fae2d344a7214f44\n"
    },
    {
      "commit": "3e2446bbe9326786a970c88bbfac80b8ed8e5cdd",
      "tree": "3495f831cb926030c57901152a939718ff12886e",
      "parents": [
        "1adb04fd1ab7a44b5bf0e0d8deb522b68849a2f6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 12 10:00:57 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 14 17:58:19 2019 +0000"
      },
      "message": "ART: Correctly handle an abort from an unattached thread\n\nLibbase may be shared with other platform components. In that case,\nif the aborting thread is attached to the runtime, ART will print\nits usual dump to be helpful.\n\nIf the thread is unattached, this must not be done as it would\nviolate mutex invariants.\n\nBug: 135056249\nTest: m test-art-host-gtest-runtime_test\nChange-Id: I61c3df5fdbc8ddaf279f39dc653738016986dcd9\n"
    },
    {
      "commit": "2a905b2b50fb77723f6627e2d6a5df218d21081f",
      "tree": "4fa5d59381ed16073bc5f57cf9c9522e6f81acdd",
      "parents": [
        "29bb803f2d41ea48e9f255dadd22b4c291e0a036"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 06 09:04:07 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 06 12:53:49 2019 +0000"
      },
      "message": "Move memory related regions of the JIT cache in its own class.\n\n- Moves the JIT lock into the global locks list\n- Jit cache has two regions: one inherited from zygote, and its own.\n\nBug: 119800099\nTest: boot, test.py\nChange-Id: I833ba2b5a3d3c10fa01286cdf52603fa174a2cc7\n"
    },
    {
      "commit": "2cd21b20345c2733bda1366830ffd767f0682b9f",
      "tree": "d0608ef42e7be046bf6134cd9e5994db3310d389",
      "parents": [
        "7c5acbb122485b6215dc34defc1f19e07390bb95"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 25 12:58:10 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Apr 26 03:25:04 2019 +0000"
      },
      "message": "ART: Make bad_mutexes abort message legible\n\nRemember the actual violation and use it as the abort message.\n\nBug: 131324618\nTest: m test-art-host\nChange-Id: I4c3edb328501917b838ec1b3443e454c6ac1a13f\n"
    },
    {
      "commit": "81dc7ab1df59021463757e06a95b2abc937a73db",
      "tree": "3ae773ed2d58546cfd0bfd8c07f659985d75bdd6",
      "parents": [
        "fe9181db92a778c4ef3c4d25e0302553bf970e26"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Apr 19 17:34:31 2019 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Apr 25 16:06:24 2019 +0000"
      },
      "message": "Speed up and slightly simplify Mutex\n\nEliminate the separate seqentially consistent contention counter load\nin Mutex::ExclusiveUnlock by putting the contenion counter in the\nMutex\u0027s state word.\n\nReplace some CHECK_GE checks with CHECK_GT. We were checking quantities\nintended to be non-negative against \u003e\u003d 0 just before decrementing them.\n\nRemove a pointless volatile declaration.\n\nIntroduce constants for the first FUTEX_WAKE argument. Remove all uses\nof -1 as that argument, everywhere in ART. It appears to work, but the\ndocumentation says it\u0027s wrong.\n\nThis does not yet address the ReaderWriterMutex issue, which is handled\nin a different way in a separate CL.\n\nBenchmark runs with and without this CL weakly suggest a tiny, not\nstatistically significant, improvement in both time and space with this\nCL.\n\nBug: 111835365\nTest: Build and boot AOSP. TreeHugger.\nChange-Id: Ie53c65f2ce774a8cb4d224e2c1b3a110eb880f0c\n"
    },
    {
      "commit": "467b692bfa088098d57947ed3d764fbf1a072974",
      "tree": "88ab3ab12a8ca1f539cabed92f067cec5d00f8ea",
      "parents": [
        "1973687350e8431d316655c00fc0701c0e1c4597"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Apr 22 16:15:53 2019 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Apr 24 17:04:44 2019 +0000"
      },
      "message": "Use single contention counter for rw mutexes\n\nThis halves the number of sequentially consistent contention counter\nloads when we release a mutex.\n\nThis is more expensive than keeping the contention counter as part\nof the state word. But schemes to do that either risk overflow, or\nseem more subtle than we we would like at this stage. This gets us\nhalf-way to where we would like to be. And, since we were previously\nalways looking at both counters anyway, it seems like low risk\nchange.\n\nBug: 111835365\nTest: Build and boot AOSP, TreeHugger\nChange-Id: I752859f6c51283de3ba5078233d2873a733ad4a1\n"
    },
    {
      "commit": "66834468e9106e264a74766c17a0c047a3448921",
      "tree": "be827201de65b3dc888182c949ac580e084a0fb4",
      "parents": [
        "11d5a2507adf5a6d06adca5f18c399b826883182"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Apr 08 16:28:29 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Apr 10 22:42:02 2019 +0000"
      },
      "message": "Revert^2 \"Perform SetEvent under the user_code_suspend_count_lock_\"\n\nIf we needed to condition-wait for a gc to finish we would trigger an\noverly restrictive deadlock check. This passed testing because\nnormally the Wait will not be executed. To prevent this type of issue\nfrom occuring in the future we added a way for code to assert that\ncondition-waiting is allowed without actually going to sleep.\n\nThis reverts commit eaa4831142fa58f176ddad52c0d5e9c288e26b81.\n\nReason for revert: Relaxed too-strict check in CheckSafeToWait.\n\nTest: ./test.py --host\nBug: 130150240\n\nChange-Id: I8359e595cdd73f49cb68c8c70d755cab0e563ac7\n"
    },
    {
      "commit": "eaa4831142fa58f176ddad52c0d5e9c288e26b81",
      "tree": "5aae9d939a3aeccd33dfb1f8e4b6df362fc15fdd",
      "parents": [
        "c723b81ea2c34b096c1a7ab88bce23c98f6419f5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Apr 08 16:14:33 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Apr 08 16:17:19 2019 +0000"
      },
      "message": "Revert \"Perform SetEvent under the user_code_suspend_count_lock_\"\n\nThis reverts commit 3fa8b6db7b556035f192d037b35210677250798e.\n\nBug: 130150240\nReason for revert: Causes lock-level violations on gcstress\n\nChange-Id: Ie580be5658da63f951652ba74cfbf25fa845765c\n"
    },
    {
      "commit": "3fa8b6db7b556035f192d037b35210677250798e",
      "tree": "f8b19265c1b17506848c97d91ed6100971fe0f4b",
      "parents": [
        "4f215d1b1ceba9dfc8d8f3d8644da81302b2cd86"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Apr 03 17:00:02 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 04 20:01:24 2019 +0000"
      },
      "message": "Perform SetEvent under the user_code_suspend_count_lock_\n\nWe would perform major parts of SetEvent without any synchronization\nand perform multiple internal suspensions. This could lead to\ninconsistent state or deadlocks.\n\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\n\nChange-Id: Ice2fc94b4f82fcd5938928e8dbf1bdddd29000ab\n"
    },
    {
      "commit": "39402548017c99f9b33afaa851f412371013e911",
      "tree": "80c4d53cb7ae12ab9f4800cb358e53d5109593da",
      "parents": [
        "2fde9bdc252e209d722f83410f2ced42ab73e8a4"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Sun Mar 24 02:47:16 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 29 18:18:00 2019 +0000"
      },
      "message": "Modernise code to use override specifier\n\nGenerated by clang-tidy, with IgnoreDestructors option enabled.\n\nTest: m checkbuild\nBug: 116509795\nChange-Id: I5dafa10c2cf605165581b8cf7dd2633ed101ed65\n"
    },
    {
      "commit": "119733d87242414100df7b9eedb6d1672a03ead6",
      "tree": "19ba75bd42d3c94a4de0684ae66f4078da1546a6",
      "parents": [
        "8a64e773d4d1221166c6a8206315b450e448705a"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 15:14:41 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jan 31 15:39:55 2019 +0000"
      },
      "message": "Revert \"Revert \"ART: introduce PALette abstraction layer\"\"\n\nThis reverts commit e6e01a0a00de80704ccb21c48d5d8bdee4470b77.\n\nBug:  122824298\nTest: art/test/testrunner/run_build_test_target.py -j50 art-test-javac\nTest: m out/target/common/obj/PACKAGING/hiddenapi-stub-flags.txt\nTest: frameworks/rs/build_rs.py\nChange-Id: If7b9ddca3daa80b75b3541abd283bf47d5b81118\n"
    },
    {
      "commit": "e6e01a0a00de80704ccb21c48d5d8bdee4470b77",
      "tree": "8f9cc651764686140accaadcfb8f77bf7572c24b",
      "parents": [
        "4b9d00aca9b025b545c9633b4605334c22fc4d2d"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 14:02:30 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 14:02:30 2019 +0000"
      },
      "message": "Revert \"ART: introduce PALette abstraction layer\"\n\nThis reverts commit 4b9d00aca9b025b545c9633b4605334c22fc4d2d.\n\nReason for revert: breaks renderscript mac and run_host_tests in master.\n\nChange-Id: I6024894a384c65f3e7d81b9c5bba8ebe8ce1b420\n"
    },
    {
      "commit": "4b9d00aca9b025b545c9633b4605334c22fc4d2d",
      "tree": "7984bf247f908d145b7c6b48df99f3f0a80ae148",
      "parents": [
        "4ee4561f2153f3b0bc3be2e781488a97c73ca58e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jan 03 17:04:02 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 09:00:27 2019 +0000"
      },
      "message": "ART: introduce PALette abstraction layer\n\nThis change decouples direct dependencies on system libraries.\n\nBug: 122824298\nTest: art/test.py --host --64\nTest: art/test.py --target -j8\nTest: m -j100 \u0026 flashall -w \u0026 device boots\nTest: art/build/apex/runtests.sh\nChange-Id: Iae927ed9aaa228a941cd444cef04e6ec53955299\n"
    },
    {
      "commit": "ea34d46b421c8ad7a226f0c094e717464bb141eb",
      "tree": "110f287312d04570341d9823579fe34687dce072",
      "parents": [
        "b8f88f33b5ad0a593e5c63beab45d05f4c791bf4"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Mon Jan 28 17:23:04 2019 -0800"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Mon Jan 28 17:23:04 2019 -0800"
      },
      "message": "Fix lock order issue with large-object space lock\n\nWe have a code-path where GC thread acquires large-object space lock (a\nhigher level lock) after acquire JNI global lock (a lower level lock).\nMoving AllocSpaceLock to be lower than JniGlobalsLock to fix this.\n\nBug: 120782890\nTest: art/test/testrunner/testrunner.py --host\nChange-Id: I4f169c779cb17f6c14f6e5278857845f9904e62c\n"
    },
    {
      "commit": "8764dc3b3eda7f6f13ed7b584475503fe5bedd59",
      "tree": "e8f6e3a4a2596595ffdc8a517daaf37030482eae",
      "parents": [
        "49b74a8c685acfe43dd33e3f51a24c486388bee1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jan 07 15:20:12 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 09 12:38:30 2019 -0800"
      },
      "message": "ART: Use iosfwd more\n\nUse iosfwd where an include of ostream is unnecessary. Also move\ncallee_save_type.h to runtime.\n\nBug: 119869270\nTest: mmma art\nChange-Id: Id8995d6f524e4c491eb6f57fdffb940cf35d291f\n"
    },
    {
      "commit": "5a0430d0239481f4efb252d60ec9641703b8d456",
      "tree": "cd7bdb45d94e7af3aa3e1bbb5958f930bcee29f6",
      "parents": [
        "b9b995738c8f53d68446d14553c1befd487877e7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 04 14:33:57 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 09 12:38:20 2019 -0800"
      },
      "message": "ART: Introduce runtime_globals\n\nSplit libartbase\u0027s globals.h into actual globals, and runtime-\ndependent globals which should live in runtime.\n\nBlanket-convert all runtime/ inclusions.\n\nIn future CLs, the number of global constants should be reduced.\nFor example, GC types are only relevant to GC/alloc functionality.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I2d8cd32e0e7ab4084d2f2e96864b5338a78da94e\n"
    },
    {
      "commit": "ada33d754fdc987e2658a7bab38f5ca7c70f266c",
      "tree": "e588bba5ec19664e0b035a0d1cd43c96da6c05bd",
      "parents": [
        "e29b950562bae79fe8eb22e13a9cb533c9d8c5d0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 17 13:17:30 2018 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 19 16:54:23 2018 -0800"
      },
      "message": "Move startup thread pool back into runtime\n\nAdded logic in heap trim to delete the thread pool, if there are no\nactive users.\n\nAdded a scoped accessor to prevent ref counting errors.\n\nMotivation, have workers already created when the app images are\nloaded.\n\nBug: 116052292\nTest: test-art-host\nChange-Id: I8ea776d74e88601222a9989e0c6dac34cf77c683\n"
    },
    {
      "commit": "0bbac3089b5637103585b04774eea3d959c4f24d",
      "tree": "62685295f10f87548d4a14996f384e943645130d",
      "parents": [
        "365a64b2085392f4d625725793f10f50f191853c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 30 09:44:12 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Hide mutex in TimingLogger\n\nEnsure that timing_logger.h does not pull in mutex.h.\n\nBug: 119869270\nTest: m test-art-host\nChange-Id: I84b92dbc435a3f273f3dc519bbf7948220636c2f\n"
    },
    {
      "commit": "7fbc4a59ba2e60d869313d7961662430df83b2cb",
      "tree": "59520285df8d2075412ddc566a0d4d96d4c7e109",
      "parents": [
        "7cc45fd1dbcf5704e442d0443e437aa2ae3fe21b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 28 08:26:47 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Move to using locks.h instead of mutex.h\n\nWhen only annotating lock requirements, use locks.h.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I1608b03254712feff0072ebad012c3af0cc3dda4\n"
    },
    {
      "commit": "7cc45fd1dbcf5704e442d0443e437aa2ae3fe21b",
      "tree": "76e582afd0580be21497787c584cab61f7599997",
      "parents": [
        "03eb36c6940060f82f887b3e8860a91c1f97224c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 21 16:03:08 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Factor out lock order and holder from mutexes\n\nIsolate the order and holder class from the mutex definitions.\nThe locks header requires significantly fewer includes, and\nwill be used in a follow-up change to remove mutex.h dependencies\nin headers just for the sake of annotation lock requirements.\n\nThis is itself an NFC commit, only pulling the code apart.\n\nBug: 119869270\nTest: m test-art-host\nChange-Id: I11ca161ac3118725c79313a82f58595699b590bf\n"
    },
    {
      "commit": "af77ad46543ec13d77a53634507901f580d90fb6",
      "tree": "8dd3f7f719836035cff40465533b56079a6a7004",
      "parents": [
        "244470afafdb1c5aba17507ef793d316b9c4d038"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Tue Nov 20 11:04:05 2018 -0800"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Mon Nov 26 08:46:31 2018 -0800"
      },
      "message": "Reorder kThreadWaitLock\n\nIn aosp/814976, a new lock level was created for thread wait locks,\nwhich were previously at kDefaultMutexLevel. I missed that another lock,\nkMarkSweepMarkStackLock, was acquired while holding the thread wait\nlock. This corrects the ordering.\n\nBug: 119755302\nChange-Id: Ib55228d2759e281dc0f3a2177a538fd9adfec163\n"
    },
    {
      "commit": "c665d6368e85a5eb8055a58c535b41777c97d7c7",
      "tree": "712cc488031bbf89767676d3a651df1a94ada611",
      "parents": [
        "4fc843c4fc9f33c4ba49c1303d526d0e0e6a3788"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Tue Nov 06 16:20:13 2018 +0000"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Fri Nov 09 07:52:11 2018 -0800"
      },
      "message": "Revert^2 \"Notify waiters when releasing the monitor\"\n\nThis reverts commit 9cec9658ec0b7a6c715a154ec834faba853188e3.\n\nReason for revert: Changed lock ordering to not require reacquiring the\nmonitor lock while holding the wait lock.\n\nTested: 1000 iterations of ThreadStress\nBug: 117842465\nChange-Id: I7b54943052c5eba367eac86da9646bfc81bc1163\n"
    },
    {
      "commit": "9cec9658ec0b7a6c715a154ec834faba853188e3",
      "tree": "84d926444e66b5c5f91a7ee68fa65d5efe3ba8c0",
      "parents": [
        "1ebb52ca700b6d9f9c27c3ee3e688ed17a43d358"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 06 10:50:20 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 06 10:50:20 2018 +0000"
      },
      "message": "Revert \"Notify waiters when releasing the monitor\"\n\nThis reverts commit 1ebb52ca700b6d9f9c27c3ee3e688ed17a43d358.\n\nReason for revert: Break ART run-test ThreadStress by failing this\nassertion:\n\n  dalvikvm32 E 11-06 09:43:27 27100 27851 mutex-inl.h:134] Lock level violation: holding \"a thread wait mutex\" (level ThreadWaitLock - 9) while locking \"a monitor lock\" (level MonitorLock - 54)\n  dalvikvm32 F 11-06 09:43:27 27100 27851 mutex-inl.h:145] Check failed: !bad_mutexes_held\n\nBug: 117842465\nChange-Id: I888201bf5c252c8366618d9169a37e4a4cc29734\n"
    },
    {
      "commit": "1ebb52ca700b6d9f9c27c3ee3e688ed17a43d358",
      "tree": "dbc70ca80226ea0abb7a404a122b81400b90f52d",
      "parents": [
        "23d3ed8c124f239d26a583f9d096b22f7f6677d1"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Thu Oct 25 15:37:14 2018 -0700"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Fri Nov 02 18:06:46 2018 -0700"
      },
      "message": "Notify waiters when releasing the monitor\n\nThis avoids a ping-pong thread scheduling issue, where a waiter\nimmediately tries to acquire the monitor held by the notifier.\n\nBug: 117842465\n\nChange-Id: I33b91b066c9412b031fd6432bcb61273fb8d8fea\n"
    },
    {
      "commit": "7530bae4f286d828d6394303ee2622c1b01b7e43",
      "tree": "6232fa29b6ce0dd2d4ac4cc47615ee08d9da59a9",
      "parents": [
        "97d40f9c7b1157783d09861ce76d3a0b3da73cbe"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Mon Oct 29 20:03:51 2018 -0700"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Wed Oct 31 18:40:21 2018 +0000"
      },
      "message": "Use _PRIVATE versions of futex ops.\n\nThis flag allows some performance optimizations in the kernel for futex\nwords that are only used in one process.\n\nTested: art$ grep FUTEX_  **/*.cc **/*.h\n\nChange-Id: I490b9592ca0f0ab5ab5431682e8b2104f5c917ca\n"
    },
    {
      "commit": "2947ba6f1a14d7ea30aa60c3032fa07585cce1b4",
      "tree": "f73195582a9e59b190367b5de19b4c1e8fa2a0f4",
      "parents": [
        "41ae033a4214208b589d8e1df423084728e08716",
        "bcd16eef679c4a11f20e6534b245a52443b6d521"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Oct 31 14:31:30 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 31 14:31:30 2018 +0000"
      },
      "message": "Merge \"Requeue rather than wake when notifying.\""
    },
    {
      "commit": "1130659b0d948806e7ca974ead8ad2bcc1951d13",
      "tree": "9046a016fafc7f9bff4e34732aa8f89ed81ad46c",
      "parents": [
        "1c1442a498fd3f9ddc5d2bb04baa7ccd2d3539c4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 26 14:22:59 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 30 10:20:32 2018 +0000"
      },
      "message": "Refactor MemMap::MapAnonymous().\n\nRemove the address argument from the shortcut overload and\nintroduce one more shortcut overload. This makes it easier\nto find all uses where we pass non-null address hint.\n\nRemove `requested_begin` parameter from some constructors\nwhere we were always passing null. Rewrite some tests to\nuse the reservation API.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 118408378\nChange-Id: Ibbbb96667e7cc11cf7fea119892463d8dbc9a8b5\n"
    },
    {
      "commit": "bcd16eef679c4a11f20e6534b245a52443b6d521",
      "tree": "218339ad91bfca357553ba33b89a215ff8db348c",
      "parents": [
        "f4fd65e393fe60f17e22ee7823f8dce4594c053d"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Mon Oct 22 13:03:23 2018 -0700"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Thu Oct 25 09:09:09 2018 -0700"
      },
      "message": "Requeue rather than wake when notifying.\n\nRequeueing avoids contention when the newly-awoken waiter attempts to\nacquire the lock held by the notifier.\n\nBug: 117842465\nChange-Id: I78646245b538022012d546df12514f5d43d9f234\n"
    },
    {
      "commit": "98ea9d9d82ab078ca10fa7f8e02eddda94cf1d98",
      "tree": "a848b7e41ff227a2d3d4d6795ec11089f39cb6ca",
      "parents": [
        "02338775e33b553be51d44ff60bb1ef8e527bd94"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 19 14:06:15 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 23 15:19:55 2018 -0700"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles runtime.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: Ibc0d5086809d647f0ce4df5452eb84442d27ecf0\n"
    },
    {
      "commit": "2d899c41ac389ab881a56a82380e7bdb91fbbcc8",
      "tree": "cc0a13d666ad7b767f76261e1917a1f7039d8cd6",
      "parents": [
        "6e82b7e6726d2c2ed0d6754ce1557d00e051b52c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 17 16:03:42 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 17 16:03:42 2018 -0700"
      },
      "message": "Fix usages of TEMP_FAILURE_RETRY(pthread_foo(...)).\n\npthread functions don\u0027t return -1 and set errno on failure, they return\na positive errno value instead.\n\nTest: treehugger\nChange-Id: I0097660e44c86c4c49d642e1169a30e43f9662bf\n"
    },
    {
      "commit": "c55bb390d88b8eb62a50932f7f9b47c2a3733f16",
      "tree": "ec2e74f3f8404dffcb9bfde4e7ffa3416a35543d",
      "parents": [
        "89468aeaa6a67ae4025b30d427391186306d6522"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 21 00:02:02 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 20 18:37:12 2018 -0700"
      },
      "message": "Revert^2 \"ART: Refactor typedef to using\"\n\nThis reverts commit ee07743e03042c2ca36e0c9513847a9e7d2509f1.\n\nReason for revert: fixed attributes.\n\nBug: 32619234\nTest: m test-art-host\nTest: m test-art-target-gtest-unstarted_runtime_test\nChange-Id: I6f0a775adfdf6ecd132b470f7c5446e949872e20\n"
    },
    {
      "commit": "ee07743e03042c2ca36e0c9513847a9e7d2509f1",
      "tree": "66867d7443a3798f6d882ef2715ddeb7baf3e771",
      "parents": [
        "9a20ff06f7ccee08a742c315ec6d351ab56ba1cd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 20 15:05:17 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 20 15:05:17 2018 +0000"
      },
      "message": "Revert \"ART: Refactor typedef to using\"\n\nThis reverts commit 9a20ff06f7ccee08a742c315ec6d351ab56ba1cd.\n\nReason for revert: Attributes on the wrong side.\n\nBug: 32619234\nChange-Id: I8fd2abef619b22c02ccfbf5ae629339f1a60918b\n"
    },
    {
      "commit": "9a20ff06f7ccee08a742c315ec6d351ab56ba1cd",
      "tree": "7e55557e118eb5fffe03ad3456e00d8469a36232",
      "parents": [
        "70dfb6983492aff1c52cc1b52044258aef51f47f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 19 10:58:18 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 19 21:56:32 2018 -0700"
      },
      "message": "ART: Refactor typedef to using\n\nAdd clang-tidy\u0027s modernize-use-using.\n\nBug: 32619234\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: If50d37b5152af4270784e3cde7951292a9e19033\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "f6985bd84b27b25e2c2ae1b865a4f28a0ccd578b",
      "tree": "5ec94a773e2c7e19842b1f2de02baf4343aff6c9",
      "parents": [
        "19759b28bc9dad1581c207d76227eb74fc8eebcb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 24 09:02:28 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 24 09:40:56 2018 +0100"
      },
      "message": "Add an overload for MemMap::MapAnonymous().\n\nAdd an overload that does not take `reuse` or `use_ashmem`\nparameters but uses default values (`reuse \u003d false` and\n`use_ashmem \u003d true`) to simplify callers.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: Iaa44f770dee7e043c3a1d6867dfb0416dec83b25\n"
    },
    {
      "commit": "c34bebf39410f5571d3d5813157b61f274d435c3",
      "tree": "73909d3b34a2908e9de44cc60c4a2ff74eabefd7",
      "parents": [
        "f345404c725330914b8313d2c1af17226c5b92ca"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 16 16:12:49 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 21 13:51:00 2018 +0100"
      },
      "message": "Remove unnecessary indirection from MemMap.\n\nAvoid plain MemMap pointers being passed around by changing\nthe MemMap to moveable and return MemMap objects by value.\nPreviously we could have a valid zero-size MemMap but this\nis now forbidden.\n\nMemMap::RemapAtEnd() is changed to avoid the explicit call\nto munmap(); mmap() with MAP_FIXED automatically removes\nold mappings for overlapping regions.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nTest: m test-art-target-gtest\nTest: testrunner.py --target --optimizing\nChange-Id: I12bd453c26a396edc20eb141bfd4dad20923f170\n"
    },
    {
      "commit": "33b7b5da331e0a10fc615c8df72ba2aefad4e3fb",
      "tree": "4894623ad71bf957c25009e35e1b57ba501bb9c3",
      "parents": [
        "134380d7c70d95962ed818458185e608ad17ff08"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 07 19:13:51 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Aug 17 14:40:51 2018 -0700"
      },
      "message": "Revert^2 \"Fix race in CommitCodeInternal and cleanup\"\n\nThis reverts commit 8dde74eb7bec8e989f34d86a01c26b0f5c7e6443.\n\nWe were failing to do a null check in cha.cc. Due to compiler\noptimizations this would actually run without error on non-asan\nbuilds, causing the error to pass testing.\n\nReason for revert: Fixed issue causing asan issue.\nTest: run asan tests\n\nChange-Id: Ic5492c69b7735555108d8b18c8e687ce510c4549\n"
    },
    {
      "commit": "8dde74eb7bec8e989f34d86a01c26b0f5c7e6443",
      "tree": "e94f5e620f27b3d6dcb3b634bc25bf0274b1143b",
      "parents": [
        "a2af2b0c761a04d1e1ba4b1ccdc2efb4692e9c9c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 07 19:11:05 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 07 19:11:05 2018 +0000"
      },
      "message": "Revert \"Fix race in CommitCodeInternal and cleanup\"\n\nThis reverts commit a2af2b0c761a04d1e1ba4b1ccdc2efb4692e9c9c.\n\nReason for revert: Seems to cause the asan gtests to fail.\n\nChange-Id: I0c7b4720de16f9b2b4e1e27c3c4e57a018c59a0c\nTest: none\n"
    },
    {
      "commit": "a2af2b0c761a04d1e1ba4b1ccdc2efb4692e9c9c",
      "tree": "6c84decdf15db52cf8c20074f55b6f4fc89f9520",
      "parents": [
        "d0c6ec392756fd038ebb8aeaad19aed94c5fd1a5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jul 19 14:39:24 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Aug 01 09:15:23 2018 -0700"
      },
      "message": "Fix race in CommitCodeInternal and cleanup\n\nJitCodeCache::CommitCodeInternal had a race where it gained the\ncode-cache lock to allocate memory, then drops it and potentially\nsuspends. It relied on the time for a code-collect being strictly more\nthan the time this function took, creating a race. This CL Changes the\nlock ordering of CHA to allow us to cleanup the CommitCodeInternal\nfunction and remove the race.\n\nTest: ./test.py --host --jit\nChange-Id: I13c7ec6c56f07660778009ad8ce9c8c10bc2d57d\n"
    },
    {
      "commit": "240a564a2bb3bc70c5983300037a199d751c7727",
      "tree": "132585fa41a9580f0abd4820abfa7c43dfb41d42",
      "parents": [
        "be272b93ffcec3ccfd2311a58fd28c3927561ed1"
      ],
      "author": {
        "name": "Hyangseok Chae",
        "email": "neo.chae@lge.com",
        "time": "Wed Jul 25 16:45:08 2018 +0900"
      },
      "committer": {
        "name": "Hyangseok Chae",
        "email": "neo.chae@lge.com",
        "time": "Fri Jul 27 09:16:02 2018 +0900"
      },
      "message": "Ensure seq_cst memory ordering for num_contenders\n\nProblem.\nMutexes and ReaderWriterMutexes can lose wakeups due to\nweak memory ordering. An unlocking thread may overlook waiters.\n\nThread A\n0. ExclusiveLock\n1. increase num_contenders as default ordering.\n  (fetch_add, std::memory_order_seq_cst)\n2. futex waiting\n...permently waiting\n3. wakeup\n4. decrease num_contenders\n5. running\n\nThread B\n0. Reset lock state to unlocked using seq_cst CAS.\n1. load num_contenders with LoadRelaxed\n   (std::memory_order_relaxed)\n2. if num_contenders is bigger than 0, wakeup waiters.\n\nThread B\u0027s load of num_contenders may be reordered with the store\nin the preceding CAS (step 0).\n\nWe can then get the following interleaving:\nA.0 (fails: lock held.)\nB.0a (CAS load acquire sees lock as held)\nB.1 (sees num_contenders \u003d 0)\nA.1 num_contenders++;\nA.2 futex starts waiting (state unchanged)\nB.0b (CAS store release sets state to unlocked)\nB.2 (does nothing since num_contenders was 0)\n\nWe observed this hang with state_ \u003d 0,\nexclusive_owner_ \u003d 0, num_contenders_ \u003d 1\nIndeed, the preceding comment strongly suggests that the num_contenders\nload should not be relaxed.\n\nTest: test-art-host, test-art-target\n\nChange-Id: I912bcd3a186d9c36fb3da8a41c1f9aa1f7b39be5\nSigned-off-by: Hyangseok Chae \u003cneo.chae@lge.com\u003e\n"
    },
    {
      "commit": "184f0759ef700b1412c7df412c4ebb297427d9fc",
      "tree": "beef751010816fbbee70494422fd48d46559a4ac",
      "parents": [
        "ec1f1a91328f44d93cfc16e39160dbdfce2f7b9a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jul 13 11:18:22 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jul 16 16:20:01 2018 -0700"
      },
      "message": "Rewrite thread CustomTLS to support keyed TLS entries\n\nOur Thread struct allowed plugins or other parts of the runtime to use\na single custom_tls_ void* pointer to store additional data in the\nThread struct. Unfortunately it was limited to a single value. This CL\nchanges the API to allow one to pass in a const char* key that is used\nto address the TLS data. This lets multiple plugins or parts of the\nruntime set their own independent TLS entries. This also adds support\nfor TLS entries actually being deallocated automatically.\n\nTest: ./test.py --host\nChange-Id: I40fa767b9c61a755b2ed910e4ad1e6327705e941\n"
    },
    {
      "commit": "3e36a9c24f591097b4403fe77b1d426c03aeb56a",
      "tree": "64f9c8896038ada2f7a17bd7cc62c488027dd548",
      "parents": [
        "25bf44622d6359c1d49c2a8a8b45938ff099f811"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jun 19 09:45:05 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jul 10 08:44:52 2018 -0700"
      },
      "message": "Move back to jit code on trace removal\n\nThis changes the lock hierarchy so the lock checker is able to\ncorrectly determine that we will not deadlock. This lets us replace\nthe jit code in the method when tracing is removed.\n\nTest: ./test.py --host\n\nChange-Id: I14dd4eb9814c73fa3639239bb56d91c8303cec60\n"
    },
    {
      "commit": "896583ec8809497bb844c857dd042b0d2e7d1ba1",
      "tree": "1075075e9b9b9fdb8627d07eabf823776bdcf2e7",
      "parents": [
        "cca7cb9ffa56d8ab8fd0c5997c8bfd965d7426c1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 15 13:31:58 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 25 10:24:53 2018 -0700"
      },
      "message": "ART: Use clang-tidy to warn on RAII issue\n\nRemove the macro hack to detect likely-incorrect usage of RAII wrappers.\nInstead make the clang-tidy pattern bugprone-unused-raii fatal.\n\nTest: mmma art\nChange-Id: I9d0eb1c5c3f469b2907111af9d38d947b36c4878\n"
    },
    {
      "commit": "05e34f4cb8c9db165d1008721e874b9dd3db024b",
      "tree": "c41d397ef5cfb9d7918fceadcda3195a0d0d91de",
      "parents": [
        "428d80e3a49f732b39bb0c71cfde26451e3fdf4d"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu May 24 13:19:05 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jun 11 14:03:37 2018 +0100"
      },
      "message": "Revert^2 \"Remove support for Valgrind in ART.\"\n\n- Disable test configuration art-gtest-valgrind64\n  (art-gtest-valgrind32 was already disabled).\n- Remove Makefile logic regarding testing with Valgrind.\n- Remove occurrences of `TEST_DISABLED_FOR_MEMORY_TOOL_VALGRIND`.\n- Replace occurrences of `TEST_DISABLED_FOR_MEMORY_TOOL_ASAN` with\n  `TEST_DISABLED_FOR_MEMORY_TOOL`.\n- Replace the potentially dynamically evaluated\n  `RUNNING_ON_MEMORY_TOOL` expression with constant\n  `kRunningOnMemoryTool`.\n- Simplify and fold the logic of\n  `art::ArenaAllocatorMemoryToolCheckImpl` and\n  `art::ArenaAllocatorMemoryToolCheck` into\n  `art::ArenaAllocatorMemoryTool`.\n- Adjust comments regarding memory tools.\n- Remove Valgrind suppression files.\n- Remove `--callgrind` option from tools/art.\n\nThis reverts commit 8b362a87d52a6668ffd2283ef6ffc274315f41c8.\n\nChange-Id: I23c76845e6ccf766f19b22b58a0d5161f60842a9\nTest: art/test.py\nTest: art/test/testrunner/run_build_test_target.py art-asan\nBug: 77856586\nBug: 29282211\n"
    },
    {
      "commit": "197f1ef6f4f2411d011d7e8f696775c3fbcffd86",
      "tree": "eacc720024479e75b03d12ac6764f2cd2ba945b3",
      "parents": [
        "04f0eaffa70e0384c07bb3680aa0724144358330",
        "8b362a87d52a6668ffd2283ef6ffc274315f41c8"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 22 23:00:40 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 22 23:00:40 2018 +0000"
      },
      "message": "Merge \"Revert \"Remove support for Valgrind in ART.\"\""
    },
    {
      "commit": "8b362a87d52a6668ffd2283ef6ffc274315f41c8",
      "tree": "14b187cd0b4afde501b9cc7a9dc82c997362e888",
      "parents": [
        "8268cb677bd92bfbcfec7e803775c29687494e53"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 22 20:54:14 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 22 20:54:14 2018 +0000"
      },
      "message": "Revert \"Remove support for Valgrind in ART.\"\n\nThis reverts commit 8268cb677bd92bfbcfec7e803775c29687494e53.\n\nReason for revert: ASAN failures\n\nChange-Id: I7e66d3f3fb461ae4f6dea6ec7d506b7dface3402\nTest: SANITIZE_HOST\u003daddress m test-art-host\nBug: 77856586\nBug: 29282211\n"
    },
    {
      "commit": "f31343f1eab771010b3f293366149d2524f30902",
      "tree": "5187b2bceee4c7d5347750dc6ba0020172d5ef51",
      "parents": [
        "e816389b61d17b9a82d8e61426ddfcce20e1238c",
        "8268cb677bd92bfbcfec7e803775c29687494e53"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue May 22 16:46:43 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 22 16:46:43 2018 +0000"
      },
      "message": "Merge \"Remove support for Valgrind in ART.\""
    },
    {
      "commit": "8268cb677bd92bfbcfec7e803775c29687494e53",
      "tree": "b63ca42dcd440117187e3c859b4b311b11b8137e",
      "parents": [
        "004b8875b291af5001d384fb1eb76ae0660ff056"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri May 11 15:06:17 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon May 14 18:40:49 2018 +0100"
      },
      "message": "Remove support for Valgrind in ART.\n\n- Disable test configuration art-gtest-valgrind64\n  (art-gtest-valgrind32 was already disabled).\n- Remove Makefile logic regarding testing with Valgrind.\n- Remove occurrences of `TEST_DISABLED_FOR_MEMORY_TOOL_VALGRIND`.\n- Replace occurrences of `TEST_DISABLED_FOR_MEMORY_TOOL_ASAN` with\n  `TEST_DISABLED_FOR_MEMORY_TOOL`.\n- Replace the potentially dynamically evaluated\n  `RUNNING_ON_MEMORY_TOOL` expression with constant\n  `kRunningOnMemoryTool`.\n- Simplify and fold the logic of\n  `art::ArenaAllocatorMemoryToolCheckImpl` and\n  `art::ArenaAllocatorMemoryToolCheck` into\n  `art::ArenaAllocatorMemoryTool`.\n- Adjust comments regarding memory tools.\n- Remove Valgrind suppression files.\n- Remove `--callgrind` option from tools/art.\n\nTest: art/test.py\nBug: 77856586\nBug: 29282211\nChange-Id: Ifdcbfccc1830104c455760457df66ede4a4cd135\n"
    },
    {
      "commit": "c3e1895e7443c61b77f5c51cd2d18819cade57c1",
      "tree": "bc2705ee47091e37d683cafa020f53190708b089",
      "parents": [
        "6623bc389c43efc87668ce7465e19b195e765e22"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri May 11 16:59:31 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri May 11 17:40:56 2018 -0700"
      },
      "message": "Prepare to move ArtDexFileLoader to libdexfile\n\nMove file_utils and friends to libartbase so that ArtDexFileLoader can\nbe moved to libdexfile.  This will clean up duplication and complexity\nwith zip file handling.\n\nBug: 78652467\nTest: make -j 40 test-art-host-gtest\nChange-Id: Ia5eac1f93caf3fa918b4b48803cbfd842035e29e\n"
    },
    {
      "commit": "0d0f3164160e50ddb78022f662c5438fc167f50d",
      "tree": "13bfdad1117db0adfb8b434ff1b8e1589c0c43ea",
      "parents": [
        "9d7905fffb9eca8f4fa6f3f3d7d3deb9718e3005"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 10 12:55:40 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 10 22:49:34 2018 +0100"
      },
      "message": "Handle multidex in LocationIsOnSystemFramework.\n\nbug: 79111915\nTest: art_dex_file_loader_test.cc\nChange-Id: I507ad98c62b4c589196685d74abdeaf748502a61\n"
    },
    {
      "commit": "5db8b7b821d0b77cb3b041de7861b7d635050cc2",
      "tree": "04550e7131d527186e34b4c2d1b3be1a1d357bf7",
      "parents": [
        "a6ce173839a1bca1811fca7d9a0a39efd720611d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 08 16:10:59 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 08 16:12:41 2018 -0700"
      },
      "message": "ART: Relayout BaseMutex and Mutex\n\nReduce size of BaseMutex (and thus all derived mutex classes) by changing\nthe field layout. Reduction from 24B to 16B on 64-bit systems.\n\nBug: 79365543\nTest: m test-art-host\nChange-Id: Id7b50aa9af1ae5d249e62573ab67257c12922bfa\n"
    },
    {
      "commit": "1979c64214bd505c013d573bc8729ee94f7bdea5",
      "tree": "9b4b2298b8b9d15cd6ca0a1e06e3771f3db2163f",
      "parents": [
        "5a87e19e4bf1b6719c2aad3effde1b38d2c3085c"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Apr 26 14:41:18 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Apr 26 15:08:49 2018 -0700"
      },
      "message": "Clean up include paths\n\nRemove runtime/globals.h and make clients point to the right globals.h\n(libartbase/base/globals.h).  Also make within-libartbase includes\nrelative rather than using base/, etc.\n\nBug: 22322814\nTest: make -j 40 checkbuild\nChange-Id: I99de63fc851d48946ab401e2369de944419041c7\n"
    },
    {
      "commit": "b4dfca56fbf5a2c3612732568dce4d200b626a3a",
      "tree": "e44a0ce7c93cbd0e4f6073a8d18c65d3808314a6",
      "parents": [
        "c3d5b84592b6d9c529090cfd1e5e9fb72a00f80b"
      ],
      "author": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Sun Apr 15 11:15:14 2018 -0700"
      },
      "committer": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Sun Apr 15 11:17:08 2018 -0700"
      },
      "message": "The test for futex support should be a test for Linux\n\nTest: code inspection\nChange-Id: Ic07f1eff2704064cc4416fc58df81c471ff54f4e\n"
    },
    {
      "commit": "79e2607ab50163bfdc283f4a49decec26a216df5",
      "tree": "0cdb2c65412b64a55ddf1a486ab3d961a0301a3e",
      "parents": [
        "b4b91460b2d01d36ddcb7d55111ccd8faf390c2a"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Apr 06 17:58:50 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Apr 13 08:29:30 2018 -0700"
      },
      "message": "Move profile dependent modules to libartbase\n\nMove mem_map and zip_archive to libartbase.  This should be the last two\nremaining modules that profile_compilation_info is dependent upon.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make and boot a device\n\nChange-Id: I136ee23e426aa8ec7441e3d3f1978f1bebf4b562\n"
    },
    {
      "commit": "1ce2b3b76d121a765212d69399241843951973ae",
      "tree": "6f2bb0191c869e79891df3151d6faba3a297b9a8",
      "parents": [
        "281c99864f635ef4fd005dba4ba0c750cb9a6143"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Apr 05 11:02:03 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Apr 05 11:07:59 2018 -0700"
      },
      "message": "Move remaining runtime/base stuff to libartbase\n\nMove the remainder of the Arena stuff, plus dumpable and\nruntime/*memory_region* to libartbase.  More preparation to build\nprofiling library.\n\nBug: 22322814\nTest: make -j 50 checkbuild\nChange-Id: Iaf26d310c89bc58846553281576c18102f5e4122\n"
    },
    {
      "commit": "3215fff7ef8fa3c2250b91158560eacc613a4671",
      "tree": "50d6fe7aff3f8fae31dcf2ca020f5079f49a592f",
      "parents": [
        "6371249ce05032db5d8c4c7ec96bf7fd7264c42f"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Apr 03 17:10:12 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Apr 04 14:47:57 2018 -0700"
      },
      "message": "Separate Malloc and MemMap ArenaPools\n\nMake ArenaPool an abstract base class and leave MallocArenaPool\nimplementation with it.  This enables arena_allocator to be free\nof MemMap, Mutex, etc., in preparation to move the remaining collections\nout of runtime/base to libartbase/base.\n\nBug: 22322814\nTest: make -j 50 test-art-host\n      build and boot\n\nChange-Id: Ief84dcbfb749165d9bc82000c6b8f96f93052422\n"
    },
    {
      "commit": "27b967611b48120bf0140995ae439700fe6cc139",
      "tree": "fb6a3ce8c7bb50cfd5e265533dab3894d52f4716",
      "parents": [
        "ba6d632c0e7617a1a848551612d7cb9e60b450e6"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 13 16:06:57 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Mar 29 12:44:43 2018 +0100"
      },
      "message": "ART: Simplify quasi_atomic.h\n\nRemoves fences that duplicate std::atomic_thread_fence().\n\nBug: 71621075\nTest: art/test.py --host -j32\nTest: art/test.py --target --64 -j4\nChange-Id: I008de4d242d1a3cf4d3f50ce171abbbda647bdaa\n"
    },
    {
      "commit": "b38988a227534ae17045dadedc24d2131d59b42d",
      "tree": "4aa18d4de72ef2e614d9459234a979bff69bc7ba",
      "parents": [
        "981d6b58c81c20f7d5f7d5352c30c2d916c2e60b",
        "8e1a7cb303d7c8f763dfb99ae311b820996b1ab4"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Mar 28 10:26:07 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 28 10:26:07 2018 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Allow hidden API access from system libraries\"\"\""
    },
    {
      "commit": "8e1a7cb303d7c8f763dfb99ae311b820996b1ab4",
      "tree": "ea952245e2b907c44d5c0fcadf90f00a1fe31913",
      "parents": [
        "10c4390a7d63775b1c7e6f6a291e9aade388d733"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 27 08:14:25 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 27 18:15:21 2018 +0100"
      },
      "message": "Revert \"Revert \"Allow hidden API access from system libraries\"\"\n\nLibraries like RemoteDisplay provide an APK that an app loads into\nits process and which accesses internal APIs on the app\u0027s behalf,\nwithout exposing the internals to the app. These libraries are\nconsidered part of the platform, but were not exempt from hidden API\nchecks because they are not loaded with the boot strap class loader.\n\nThis patch adds a new flag to DexFile class which the constructor\nsets to true of the canonical location of the newly loaded dex file\nstarts with \"${ANDROID_ROOT}/framework/\". Hidden API enforcement\nthen checks this flag when determining whether the caller of\na hidden class member is allowed to access it or not.\n\nThis reverts commit 0127b71a2588efcd1a53c192c5c267157878b010.\n\nPrevious CL saw two issues:\n- buildbots would set non-existent ANDROID_ROOT for host-side builds\n- calling realpath on unquickened dex files would overflow the stack\n\nBug: 64382372\nBug: 76138670\nBug: 76165623\nBug: 76112393\nBug: 76452688\nBug: 76429651\nTest: art/test.py --target -r -b -t 674-hiddenapi\nTest: SystemUI APCT test\nChange-Id: Ie07a088509002593353965d3d24bf7362b643f40\n"
    },
    {
      "commit": "175e7862dbdb44089ef327fc43ba00c791fd3838",
      "tree": "7b7ff4327b51b57e47e4b22af8d771edb9d462c1",
      "parents": [
        "77c6fc7341143dd27c74cddd786398688d7b4c91"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 09:03:13 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 10:04:25 2018 +0100"
      },
      "message": "Revert^4 \"Compiler changes for bitstring based type checks.\"\n\nDisabled the build time flag. (No image version bump needed.)\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\n\nThis reverts commit 3fbd3ad99fad077e5c760e7238bcd55b07d4c06e.\n\nChange-Id: I5d83c4ce8a7331c435d5155ac6e0ce1c77d60004\n"
    },
    {
      "commit": "d1ede32d56d2b6c95f94a8c67d8b9f309940d9de",
      "tree": "1aa42a51731533c9d554a913e655b8091fc6829d",
      "parents": [
        "41a10575b319ca9549d7b3e8a9fe91c1cc602659",
        "3fbd3ad99fad077e5c760e7238bcd55b07d4c06e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:16:37 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 26 21:16:37 2018 +0000"
      },
      "message": "Merge \"Revert^3 \"Compiler changes for bitstring based type checks.\"\""
    },
    {
      "commit": "3fbd3ad99fad077e5c760e7238bcd55b07d4c06e",
      "tree": "e8bc33fa60c38f7e1c85f8d4acf6a738df9b426a",
      "parents": [
        "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "message": "Revert^3 \"Compiler changes for bitstring based type checks.\"\n\nThis reverts commit 3f41323cc9da335e9aa4f3fbad90a86caa82ee4d.\n\nReason for revert: Fails sporadically.\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\nChange-Id: I84d1e9e46c58aeecf17591ff71fbac6a1e583909\n"
    },
    {
      "commit": "41a10575b319ca9549d7b3e8a9fe91c1cc602659",
      "tree": "4e88a7791a1b88364e35365b558d53429d62e5b8",
      "parents": [
        "a020472fe3f732a4523cf36f56a309089193648c",
        "0127b71a2588efcd1a53c192c5c267157878b010"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 26 19:33:03 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 26 19:33:03 2018 +0000"
      },
      "message": "Merge \"Revert \"Allow hidden API access from system libraries\"\""
    },
    {
      "commit": "0127b71a2588efcd1a53c192c5c267157878b010",
      "tree": "cfe89ca742bed927e67d9cf926937fe5e6f89347",
      "parents": [
        "eefabd28c21e6ae02ca05e97bd22f9e23cbf98a5"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 26 19:31:41 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 26 19:31:41 2018 +0000"
      },
      "message": "Revert \"Allow hidden API access from system libraries\"\n\nBug: 64382372\nBug: 76138670\nBug: 76165623\nBug: 76112393\n\nSeems to cause run-test issues.\n\nThis reverts commit eefabd28c21e6ae02ca05e97bd22f9e23cbf98a5.\n\nChange-Id: Ia9b3d946742dbfde4fb56cf14413fde0600c8252\n"
    },
    {
      "commit": "de1ef6dbf9b6362621e9d0ddb2b106519d865246",
      "tree": "0095c5ff5ccc622fdfe0fdad10be42ce05be95d1",
      "parents": [
        "4ac2f25f01eeb2879a8bb7e4c72754f32d0cb497",
        "eefabd28c21e6ae02ca05e97bd22f9e23cbf98a5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Mar 26 12:28:19 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 26 12:28:19 2018 +0000"
      },
      "message": "Merge \"Allow hidden API access from system libraries\""
    },
    {
      "commit": "7075583146f52a754c6d7c91757a6333bf1b95da",
      "tree": "6e3c7a78d19c1b4f9d952d8143939c9caa5fa5b6",
      "parents": [
        "90637419635837d3a30634eb827bd8aa052adcc7",
        "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 26 10:24:30 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 26 10:24:30 2018 +0000"
      },
      "message": "Merge \"Revert^2 \"Compiler changes for bitstring based type checks.\"\""
    },
    {
      "commit": "eefabd28c21e6ae02ca05e97bd22f9e23cbf98a5",
      "tree": "58e4c2635e0d5682c3385bed639664ccfdd44f6a",
      "parents": [
        "e8a4e378c5a928d5de07bee6db99150a57dabcd8"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 22 16:27:18 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 26 08:05:33 2018 +0000"
      },
      "message": "Allow hidden API access from system libraries\n\nLibraries like RemoteDisplay provide an APK that an app loads into\nits process and which accesses internal APIs on the app\u0027s behalf,\nwithout exposing the internals to the app. These libraries are\nconsidered part of the platform, but were not exempt from hidden API\nchecks because they are not loaded with the boot strap class loader.\n\nThis patch adds a new flag to DexFile class which the constructor\nsets to true of the canonical location of the newly loaded dex file\nstarts with \"${ANDROID_ROOT}/framework/\". Hidden API enforcement\nthen checks this flag when determining whether the caller of\na hidden class member is allowed to access it or not.\n\nBug: 64382372\nBug: 76138670\nBug: 76165623\nBug: 76112393\nTest: art_dex_file_loader_test gtest\nTest: art/test.py --gtest\nChange-Id: If062bd668d7ba494bbb7b828e40932748d173b9a\n"
    },
    {
      "commit": "88591fe82f499de10591f5b77efac71f8954eae2",
      "tree": "bfa126ad55ee091e3b615bd3bb60d5f8cfb6e37a",
      "parents": [
        "e8a4e378c5a928d5de07bee6db99150a57dabcd8"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 06 13:35:43 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Mar 23 15:01:15 2018 +0000"
      },
      "message": "ART: Simplify atomic.h\n\nPrefer std::atomic operations over wrappers in atomic.h. Exceptions\nare cases that relate to the Java data memory operations and CAS\noperations.\n\nBug: 71621075\nTest: art/test.py --host -j32\nTest: art/test.py --target --64 -j4\nChange-Id: I9a157e9dede852c1b2aa67d22e3e604a68a9ef1c\n"
    },
    {
      "commit": "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d",
      "tree": "ce41c620d2cd411da3c20aa95fb9a69328e77c42",
      "parents": [
        "9ec1e24ebc683b15bb9c6db5554ac2ff9458adae"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 12 18:39:15 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 22 12:12:39 2018 +0000"
      },
      "message": "Revert^2 \"Compiler changes for bitstring based type checks.\"\n\nAdd extra output for debugging failures and re-enable\nthe bitstring type checks.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --host -t 670-bitstring-type-check\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --target -t 670-bitstring-type-check\nBug: 64692057\nBug: 26687569\n\nThis reverts commit bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb.\n\nChange-Id: I090e241983f3ac6ed8394d842e17716087d169ac\n"
    },
    {
      "commit": "62c2d71b583820685761519bbfe3ce1e79358e25",
      "tree": "a069c70f43bb0edd5472be2e4e114b47d55fefe7",
      "parents": [
        "9992e095643f6746361df03c4c98e742d9ad5899"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 09 12:54:05 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 09 12:59:46 2018 +0000"
      },
      "message": "Fix ReplaceFileExtension() to stop looking for \u0027.\u0027 at \u0027/\u0027.\n\nTest: new test in file_utils_test.\nTest: m test-art-host-gtest\nChange-Id: Iaf9d16c8595f4f88a5920549c9cee51ecd4f9d13\n"
    }
  ],
  "next": "c431b9dc4b23cc950eb313695258df5d89f53b22"
}
