)]}'
{
  "log": [
    {
      "commit": "4dc6589f392d46800a3b64625245bdfe4bbbfc2f",
      "tree": "b159262fd300a650ab89277667641ebe7e13d357",
      "parents": [
        "e0386f10d4591afa9823658099e4f2ac7a693255"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 05 17:43:35 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 07:13:01 2021 +0000"
      },
      "message": "Don\u0027t wrap VerifyError into NoClassDefFoundError.\n\nFollow RI behavior by returning the VerifyError. NoClassDefFoundError\nonly wraps initializer errors.\n\nAlso rename the field in ClassExt from verifyError to\nerroneousStateError for better clarity.\n\nAnd remove now unused feature of storing a class in the verifyError\nfield.\n\nTest: test.py\nTest: 824-verification-rethrow\nBug: 28313047\nChange-Id: I19383f7b74f22a62ab1e0b8a13bea75a14c7b33f\n"
    },
    {
      "commit": "dd411969bb486c36081926d61dbcc0bfbc8066a5",
      "tree": "aa0601299b351d41c349e64ed468cb2c9b95e6f4",
      "parents": [
        "f040914a122be86e280efe5e31af1168f2b7c72e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jun 25 08:55:22 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 13:58:08 2021 +0000"
      },
      "message": "VarHandle: add StaticFieldVarHandle class\n\nAdd StaticFieldVarHandle class to keep a live reference to the\ndeclaring class for the target field of VarHandle\u0027s targeting static\nfields.\n\nBug: 191980149\nTest: art/test.py --host -r -g\nChange-Id: I3a1cada6591d146b8f9fc9066105e3b617290185\n"
    },
    {
      "commit": "f040914a122be86e280efe5e31af1168f2b7c72e",
      "tree": "8ea3fa76be8f215d36977477015ed7f9f3a2f65c",
      "parents": [
        "b4bd92f27fb143135870d07b459ea52637afcfa5"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Mar 22 15:45:03 2021 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jul 06 10:52:35 2021 +0000"
      },
      "message": "Uncouple ART gtests from the ART APEX.\n\nIntroduce standalone versions of ART gtests on target, not bundled\nwith the ART APEX.\n\nSo far ART gtests have always been built as debug artifacts (and\nlinked against ART debug libraries). Make some adjustments in some of\nthese tests so that they can also work as non-debug artifacts and be\nused with the Release ART APEX (which contains only non-debug\nartifacts).\n\nNewly added tests:\n* `art_standalone_cmdline_tests`\n* `art_standalone_compiler_tests`\n* `art_standalone_dex2oat_tests`\n* `art_standalone_dexdump_tests`\n* `art_standalone_dexlist_tests`\n* `art_standalone_dexoptanalyzer_tests`\n  * Note: Requires root access to the device.\n* `art_standalone_libartbase_tests`\n* `art_standalone_libartpalette_tests`\n* `art_standalone_libartservice_tests`\n* `art_standalone_libarttools_tests`\n* `art_standalone_libdexfile_support_tests`\n* `art_standalone_libdexfile_tests`\n* `art_standalone_libprofile_tests`\n* `art_standalone_oatdump_tests`\n* `art_standalone_odrefresh_tests`\n* `art_standalone_profman_tests`\n  * Note: Requires root access to the device.\n  * Note: Some tests (2 out of 37) are failing in multi-ABI\n    contexts and have been temporarily disabled.\n* `art_standalone_runtime_compiler_tests`\n* `art_standalone_runtime_tests`\n  * Note: Some tests (16 out of 686) are failing and have been\n    temporarily disabled.\n  * Note: Some tests (4 out of 686) are failing in multi-ABI\n    contexts and have been temporarily disabled.\n* `art_standalone_sigchain_tests`\n\nTests not added:\n* `art_standalone_dexanalyze_tests`\n  * Reason: ART binary `dexanalyze` is not part of the Release ART APEX.\n* `art_standalone_dexdiag_tests`\n  * Reason: ART binary `dexdiag` is not part of the Release ART APEX.\n* `art_standalone_dexlayout_tests`\n  * Reason: ART binary `dexlayout` is not part of the Release ART APEX.\n* `art_standalone_imgdiag_tests`\n  * Reason: ART binary `imgdiag` is not part of the Release ART APEX.\n\nTest: atest -a art_standalone_cmdline_tests\nTest: atest -a art_standalone_compiler_tests\nTest: atest -a art_standalone_dex2oat_tests\nTest: atest -a art_standalone_dexdump_tests\nTest: atest -a art_standalone_dexlist_tests\nTest: atest -a art_standalone_dexoptanalyzer_tests\nTest: atest -a art_standalone_libartbase_tests\nTest: atest -a art_standalone_libartpalette_tests\nTest: atest -a art_standalone_libartservice_tests\nTest: atest -a art_standalone_libarttools_tests\nTest: atest -a art_standalone_libdexfile_support_tests\nTest: atest -a art_standalone_libdexfile_tests\nTest: atest -a art_standalone_libprofile_tests\nTest: atest -a art_standalone_oatdump_tests\nTest: atest -a art_standalone_odrefresh_tests\nTest: atest -a art_standalone_profman_tests\nTest: atest -a art_standalone_runtime_compiler_tests\nTest: atest -a art_standalone_runtime_tests\nTest: atest -a art_standalone_sigchain_tests\nTest: atest -a art_standalone_\\*_tests\nTest: m art_chroot \u0026\u0026 atest ArtGtestsTargetChroot\nBug: 162834439\nBug: 162734417\nChange-Id: I8beda9159d48c4ca495698357dc3bd95e3ff84d5\n"
    },
    {
      "commit": "b4bd92f27fb143135870d07b459ea52637afcfa5",
      "tree": "521f811ea786e178f685316b035fe6cb0ced0605",
      "parents": [
        "53a6334ac751aceb65d4994b81f4af815f749295"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 05 12:18:26 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 08:21:13 2021 +0000"
      },
      "message": "Faster hashing in `ClassLinker::LinkVirtualMethods()`.\n\nMeasurement shows that `ComputeModifiedUtf8Hash()` is faster\nwhen iterating over `std::string_view` than `const char*`.\nHowever, getting the length of the string with `strlen()`\nwould outweigh the benefits, so we shall only use the new\n`ComputeModifiedUtf8Hash(std::string_view)` overload when\nwe can avoid (or usually avoid) the `strlen()` call.\n\nIn `ClassLinker::LinkVirtualMethods()`, method names come\nfrom the dex file and we can avoid the `strlen()` call as\nlong as they are ASCII which is usually the case (at least\nfor boot class path methods; proguarded apps sometimes use\nnon-ASCII method names), so use `std::string_view` there.\nAlso simplify the code a bit, avoiding the UTF16 length\ncomparison. This has some trade-offs as we delay the length\ncomparison until we know the length in chars (and compare\nthat length instead) but we also replace `strcmp()` with a\nfaster `memcmp()`.\n\nThe changes to the Modified UTF-8 hashing API also prepare\nfor future work such as calculating array class descriptor\nhash without a string allocation for the full descriptor.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I6d45f738903000c55d401b776906dac83fca1a19\n"
    },
    {
      "commit": "53a6334ac751aceb65d4994b81f4af815f749295",
      "tree": "5d9f9c8fc1ca9e982972599d1bdf0969e1ebd2f0",
      "parents": [
        "2c9667363ba0f8178a077332a8ec1c74426fdc70"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 10 14:30:00 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 08:15:17 2021 +0000"
      },
      "message": "Improve comments in ReadBarrierOption.\n\nTest: m\nBug: 119486698\nChange-Id: I6afa42b03ac02b596b782a24fee2769d9138deee\n"
    },
    {
      "commit": "bf097b7f6354e7e1e8c0a7b97fb728744136e271",
      "tree": "da074baae153743c07ab7066befe853e37ee8afc",
      "parents": [
        "a9967a2ecee9043d92b97b21def3a9a4bdd803c2"
      ],
      "author": {
        "name": "Tej Singh",
        "email": "singhtejinder@google.com",
        "time": "Thu Jul 01 21:42:03 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 02 22:17:10 2021 +0000"
      },
      "message": "ART clean up metrics reporter\n\nTest: TH\nChange-Id: Iaf177c301a6bc9dedde14aca2900d4c2376cde6a\n"
    },
    {
      "commit": "cd133d85874d94cd05b5ba11389c851550e6d8f4",
      "tree": "514f7f1fa4bfaa9038e5c98a299543ccbb4bfdd6",
      "parents": [
        "971068dcaf5955634679dbfaf7b562ed52aff772"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 25 16:10:39 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 02 15:27:21 2021 +0000"
      },
      "message": "Verifier cleanups.\n\n- For apps \u003c\u003d S, keep the behavior of not analyzing an unreachable\n  handler. If \u003e\u003d T, we analyze it to simplify handling in the compiler.\n- Remove VERIFY_ERROR_SKIP_COMPILER and fold uncompilable methods into\n  checking HasInstructionThatWillThrow.\n\nTest: test.py\nBug: 28313047\nChange-Id: I20b65cf50def2a4a95617a03142575b8591ae0ec\n"
    },
    {
      "commit": "971068dcaf5955634679dbfaf7b562ed52aff772",
      "tree": "3e76f60e7136f53ca0d19a23914721515e8b2725",
      "parents": [
        "3d12876bd9782831ad5c907f1f9dc94d10867f3d"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jun 30 21:17:53 2021 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 02 10:19:42 2021 +0000"
      },
      "message": "runtime: add -Xdeny-art-apex-data-files\n\nThis option prevents the runtime from loading AOT artifacts installed\nin /data/misc/apexdata/com.android.art.\n\nBug: 192049377\nTest: manually adding option and running odsign_e2e_tests\nTest: adding option and looking at proc/maps for system_server and zygote\n\nChange-Id: I56c7ce55b64de72faf39a06238089fe4b6b84b88\n"
    },
    {
      "commit": "3d12876bd9782831ad5c907f1f9dc94d10867f3d",
      "tree": "cd2f65f171ff5ff83bd447513abf171696359262",
      "parents": [
        "1792c6ff1c9838dfbe948be124dc1a8501fc6636"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 01 09:01:51 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 02 01:40:06 2021 +0000"
      },
      "message": "Add special control flags for system server reporting\n\nSystem server is important enough to have its own config.\n\nTest: gtest\nBug: 170149255\nChange-Id: I33741751717ef3474f3a89e8fda8ad19b9e952ed\n"
    },
    {
      "commit": "1792c6ff1c9838dfbe948be124dc1a8501fc6636",
      "tree": "f8df705069592bc5037f6f580fcafe0df07f6d91",
      "parents": [
        "4f388e3f26925f84d0a623a5a0e3c909fd09bd98"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jun 24 17:35:50 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jul 01 20:17:33 2021 +0000"
      },
      "message": "Add -XX:ForceJavaZygoteForkLoop flag\n\nSetting this to true effectively disables the zygote native fork\nloop, either for testing/measurement purposes, or as a fallback.\n\nBug: 192020504\nTest: Check logcat with and without the flag.\nChange-Id: I83c401d21ae2797442011d9ac6f23c78990920bd\n"
    },
    {
      "commit": "bbdb1ed109532f42949f84194e7717453f2f37f6",
      "tree": "1fcdcf4cff743c209e1f9b732ea4a5b59d4f6939",
      "parents": [
        "9b996ce378e58f4699145721a1708732d5399a95"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 29 14:12:05 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 01 09:42:30 2021 +0000"
      },
      "message": "Cache boot classpath checksums at runtime init.\n\nTo speed up oat file checksums check.\n\nTest: test.py\nBug: 191828947\nChange-Id: I2fe97a5626220470ec3edf457a3a24e7d50ce6d7\n"
    },
    {
      "commit": "9b996ce378e58f4699145721a1708732d5399a95",
      "tree": "be1392dd6a0c029c92f1de195b74961d83da112e",
      "parents": [
        "c2753e6beec483b5b14161b6bbc8e0a86aef9397"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 29 16:05:38 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 01 01:52:04 2021 +0000"
      },
      "message": "Replace JIT total time histogram with total time counter\n\nWe don\u0027t report histograms, so let\u0027s get the total time as a\nproxy to measure JIT activity.\n\nTest: gtest\nBug: 170149255\nChange-Id: I76911f5e7f93f00dc9f133e7f89a1045b31dedc7\n"
    },
    {
      "commit": "c2753e6beec483b5b14161b6bbc8e0a86aef9397",
      "tree": "070107ce0d907ab246d4a33f4d3aac7e679006c7",
      "parents": [
        "546243375d7e129aa02ca7ea9663ed7c40b4880e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 25 15:34:09 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 01 01:52:04 2021 +0000"
      },
      "message": "Fix compiler filter / reason reporting and add the ISA to the metrics\n\nThe compiler filter / reason reporting was not accurate for a variety\nof reasons. (e.g. reporting was only done at startup, it was relying\non imprecise APIs and had errors in the logic).\n\nIn order to keep track of the precise optimization status, this CL\nintroduces the concept of AppInfo, which encapsulates the data about\nthe application / system server code paths, their optimization status\nand possible other metadata (e.g. profiles).\n\nTo populate it, we rely on 2 distinct events:\n1) The framework calling VMRuntime#registerAppInfo to inform the\nruntime about the applications code paths and their types (e.g. primary,\nsplit, secondary).\n2) Class loading, when we can determine the actual optimization status\nlike filters, reasons, and whether or not we can load the odex files.\n\nThese events may happen in any order so we could deal with a partial\nstate at some point in time, but in the majority of cases they always\nhappen at Class Loading, followed by RegisterAppInfo.\n\nThis CL also deletes the OatFileManager#getPrimaryOatFile which was\na misleading API as it didn\u0027t work in most cases. It also adds more\ntests to the metrics/reporting infra for previous missing or\nunimplemented cases.\n\nTest: gtest\nBug: 170149255\nChange-Id: If0a7a25d06ff6fb89fe4861139b7dee61c05814d\n"
    },
    {
      "commit": "a4d28dd66683c1bc27ad936d30aee71e73b084db",
      "tree": "213bf9c43b8d9d8ec9642049faaa37020a509831",
      "parents": [
        "44dc8a300adb63b1bf465de555b7f8cce0481bb3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 30 11:28:06 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 30 13:21:12 2021 +0000"
      },
      "message": "Avoid marking proxy class as erroneous twice.\n\nThis code path was missed in\n    https://android-review.googlesource.com/102184 .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 192246059\nChange-Id: Ie41c3d55b76667b186dc47999e024372669764f9\n"
    },
    {
      "commit": "44dc8a300adb63b1bf465de555b7f8cce0481bb3",
      "tree": "095bc4801079f46f36a474db3e05dded5f7971f8",
      "parents": [
        "c9df5ce4cca760b27e9650363eaba5b92d87324c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 21 15:23:49 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 30 13:04:57 2021 +0000"
      },
      "message": "verifier: do not infer an instruction will throw.\n\nTurning a regular instruction into a throwing one has currently\nundesirable consequences:\n1) It leads to inconsistencies between the AOT verification and the\n   runtime verification.\n2) It treats the following code dead and does not analyze it. We treat\n   this as an non-compilable method as it\u0027s a lot simpler for the\n   compiler to consider all code verified.\n3) It prevents verification optimizations like doing one-pass\n   analysis over the code.\n\nTo be AOT / runtime consistent and follow RI behavior, stop considering\nsuch instructions as throwing.\n\nWe make this API version dependent for app compatibility reasons.\n\nTest: test.py\nBug: 28313047\nChange-Id: I9c847043d1f431f642731a70f651c93ef22fdf86\n"
    },
    {
      "commit": "f8b5288ab53fa3dbc95ddc22264c53165fdefbdd",
      "tree": "2fdee1be7012bc73d6776d508619f8c0ef4feeaa",
      "parents": [
        "d7b416118ab6820fb1fbe93ca194c4a748b9fa59"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 25 17:00:30 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 30 12:14:25 2021 +0000"
      },
      "message": "Remove experimental flag in verifier.\n\nWe don\u0027t use it anymore. If we add new opcodes in the future, we can\ntest by disabling the verifier (something which was hard to do at the\ntime).\n\nTest: test.py\nBug: 28313047\nChange-Id: Idce9a520995d12fdfc3bd314bc06b542492a0ab8\n"
    },
    {
      "commit": "d7b416118ab6820fb1fbe93ca194c4a748b9fa59",
      "tree": "ad91272848fbe24783ee60135c357ed9bbb2f069",
      "parents": [
        "f368641c5bd373749194259409dc467df7a77edb"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jun 17 18:31:14 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Jun 29 23:55:17 2021 +0000"
      },
      "message": "Add more weak reference information to traces\n\nSeparate the marking piece of EnqueueFinalizerReferences.\n\nReport the number of finalizable objects.\n\nSimilarly report the number of SoftReferences we encounter\nand the amount of time we spend marking as a result.\n\nAdd trace information and possibly log entry when we block\ndereferencing a WeakReference or the like.\n\nDo the same for JNI WeakGlobals, with some code restructuring\nto enable that.\n\nDelete one of the two nested and almost entirely redundant\nProcessReferences ATrace tags, thus reducing the space needed\nto display HeapTaskDaemon back to what it was.\n\nBug: 189738006\nTest: Boot sc-dev and look at trace\nChange-Id: I198db632d957bcb9353ab945cedc92aa733963f0\n"
    },
    {
      "commit": "f368641c5bd373749194259409dc467df7a77edb",
      "tree": "bb2dd4f603da3de8381c4a7b148344ff4d476350",
      "parents": [
        "45848daf541599548145c265ece14aad0e973639"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Fri Jun 25 21:30:30 2021 -0700"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue Jun 29 15:41:56 2021 +0000"
      },
      "message": "[metrics] Add total-gc-time and adjust other metrics\n\nThis change introduces the following:\n1) Added total-gc-collection-time in ms as a counter so that, at anytime,\nwe can know how much time is spent in GC.\n2) Added MetricsAverage to report average of the given data point.\n3) Changed mutator-paue-time to average, which makes more sense. Also it\nis renamed to world-stop-time.\n4) Added averages of gc-throughputs.\n5) Removed gc-meta-data-size metric as we don\u0027t capture it normally due\nto the high cost of capturing this data.\n\nTest: Observe pitot data\nBug: 191404436\nChange-Id: I9da7f8c588ac4b42414beedb1b4004e0ac4b5fc2\n"
    },
    {
      "commit": "e9a4a6013010b6cc0fb392de24255deacc62c1af",
      "tree": "a0f33b7d069ec2734b11777124c7bf98d71bd59f",
      "parents": [
        "9b4e556fbd3ffc5686306d2cda7b8367dca0fdbe"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 22 16:33:34 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 29 09:50:51 2021 +0000"
      },
      "message": "Transaction support for MethodType in dex cache.\n\nTest: TransactionTest.ResolveMethodType\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nBug: 191765508\nChange-Id: I8c80e29fb84d50ca782d05db1bc4634fc002c726\n"
    },
    {
      "commit": "9060ebe88ee6917bea714d93b522197b4b184267",
      "tree": "fd0cf1f0ad22e93e51ef6edb17e41435955a0664",
      "parents": [
        "5b8eb16cb6476d4e04379fdcfad7ba2c731001ff"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Thu Jun 17 12:57:12 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 28 21:50:07 2021 +0000"
      },
      "message": "Don\u0027t let the oat file close BCP FD passed from outside\n\nBug: 186132447\nTest: odrefresh --use-compilation-os\u003d10 --force-compile\n      # complete successfully with other changes\nTest: TH\nChange-Id: I3393ccd8fdc8ece71dbed8d16ef3c62ba935ea75\n"
    },
    {
      "commit": "55ffe7fa9ead8b501a756bb53f2571e3e7602f5e",
      "tree": "c4f63e30679b3e11d65268e52bf7548416f26792",
      "parents": [
        "8bf1da992a15a79ae76bcf53e9a2909912fbe96a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jun 14 15:18:54 2021 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jun 28 11:40:15 2021 +0000"
      },
      "message": "Rename some ART gtest related Soong modules.\n\nART gtests currently link with the debug (\"d\") versions of ART\nlibraries. The gtests themselves and their libraries are compiled as\ndebug artifacts. For the sake of consistency, perform the following\nrenaming of ART gtest related Soong modules:\n\n* `libart-compiler-gtest` -\u003e `libartd-compiler-gtest`\n* `libart-dex2oat-gtest`  -\u003e `libartd-dex2oat-gtest`\n* `libart-gtest-defaults` -\u003e `libartd-gtest-defaults`\n* `libart-gtest`          -\u003e `libartd-gtest`\n* `libart-runtime-gtest`  -\u003e `libartd-runtime-gtest`\n* `libartbase-art-gtest`  -\u003e `libartbased-art-gtest`\n\nAs we plan to introduce non-debug (\"non-d\"), standalone versions of\nART gtests in the context of uncoupling ART (target) gtests from the\nART APEX (b/162834439), this renaming will help us, as we\u0027ll be able\nto use the old names of a \"d\" module for the corresponding \"non-d\"\nversion.\n\nTest: mmma art\nTest: Run ART gtests on host and target\nTest: env OVERRIDE_TARGET_FLATTEN_APEX\u003dfalse art/build/apex/runtests.sh\nTest: env OVERRIDE_TARGET_FLATTEN_APEX\u003dtrue  art/build/apex/runtests.sh\nBug: b/162834439\nChange-Id: I4ca27a7f445a760398f41a9e60a7008d77294505\n"
    },
    {
      "commit": "70e126af8a14b68f08acc9acadcdf5b4b0510781",
      "tree": "2b976fe92777e272019405955698868d5690b0e4",
      "parents": [
        "8048e2e34edc8c168d255ef11de2a8e994d5012c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 24 14:51:34 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 25 10:57:07 2021 +0100"
      },
      "message": "Clean up search for field by name and type strings.\n\nReuse the search algorithm introduced for methods in\n    https://android-review.googlesource.com/1744375\ninstead of a separate binary search implementation.\nThe performance difference should be within noise because\nwe\u0027re just replacing one binary search with another one and\nclasses usually contain just one field with a given name.\nTools like proguard can create a class with multiple fields\nwith the same name and different types, but the motivation\nfor this change is code reuse and consistency rather than\npeformance improvement for those edge cases.\n\nAlso call the `FindFieldByNameAndType()` helper directly\nfrom `FindFieldImpl()` to skip unnecessary proxy class\nchecks in `Class::FindDeclaredStaticField()`. This should\nprovide some minor performance improvement.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I436c73c3eb7872f5597bb7b7d3f657aaa0a1ec6d\n"
    },
    {
      "commit": "082659bcbf66c08e2ad9be88363c7ab88c50e114",
      "tree": "65394c78472c90aad96daa1d6b8105760f14bf31",
      "parents": [
        "1776947f896652b232ccec3fc00a04fd7baf1d96"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Jun 24 10:17:39 2021 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Jun 24 22:09:46 2021 +0000"
      },
      "message": "Switch to an assembler macro for CFI_RESTORE_STATE_AND_DEF_CFA.\n\nNewer versions of clang reject multiple assembler directives\non the same line, which breaks the preprocessor macro\nCFI_RESTORE_STATE_AND_DEF_CFA. Fix it by making it an assembler\nmacro instead.\n\nBug: 191980979\nChange-Id: I823ff9c66336931249d2bac40280b24ecdebd0cf\n"
    },
    {
      "commit": "1776947f896652b232ccec3fc00a04fd7baf1d96",
      "tree": "f6820a1b6702fe7b642427d2b3a7eb123511ede5",
      "parents": [
        "e020b7f4afc4d99cddfd52b3587280be9e3afd5d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 23 10:40:29 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 24 16:03:06 2021 +0000"
      },
      "message": "Binary search for method by name string and signature.\n\nStart with a binary search for the name string and when\nsuccessful, compare the signature. On mismatch, repeat the\nsearch with the found name index instead of the name string\nuntil we fail to find the name, have a signature match or\nend up with a method range with the same name index and\nfinish with a simple binary search for the signature.\n\nMake this search sufficiently generic so that the code can\nbe easily reused for fields in the future.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I19b4779c019e9991b6d02ace57e378c029ba1174\n"
    },
    {
      "commit": "e020b7f4afc4d99cddfd52b3587280be9e3afd5d",
      "tree": "12d79582a8ed03b0bbd61bfc57b175e4f50b8e5e",
      "parents": [
        "5fef55677ed3ce5e2255030aa58b8a39cf77fab1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 24 12:07:35 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 24 16:02:45 2021 +0000"
      },
      "message": "Faster BCP checksum verification.\n\nAvoid opening dex files for updatable BCP components.\nJust collect the checksums from jar files using the\n`DexFileLoader::GetMultiDexChecksums()` API.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 191828947\nChange-Id: Ib737fabc832c56bffef8a98382f689aabe588bd2\n"
    },
    {
      "commit": "5fef55677ed3ce5e2255030aa58b8a39cf77fab1",
      "tree": "feb27e131521d1a911e08174ebc933635939423d",
      "parents": [
        "30bb6af110e0999a87c6e9fd0145fdd4a59e98d8"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Mon Jun 21 23:33:33 2021 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Thu Jun 24 11:19:37 2021 +0000"
      },
      "message": "Clean up ART APEX manifests.\n\nmanifest-art.json: Rely on the build system to populate all required\nlibs. Besides some duplicate entries, this drops libicuuc.so,\nlibicui18n.so, and libneuralnetworks.so from the required list. None of\nthose libraries are dependencies of the ART module itself, and hence\ndon\u0027t get loaded from the ART namespace. They used to be necessary\nbefore linkerconfig supported creating links for JNI libs and from\npublic.libraries.txt, and when libnativeloader still defaulted to the\nART namespace for loading such libs.\n\ntest_apex_manifest.json: Used by test_com.android.art and should be\nidentical to manifest-art.json except for the version number. Besides\nthe above, this file contained several stale libraries.\n\nAlso try to configure proper runtime_libs dependencies for libart(d)\nfor the things it dlopen\u0027s from the ART namespace, although most\nlibraries cannot be listed there for various reasons.\n\nTest: m droid deapexer\n      deapexer info \\\n        out/target/product/vsoc_x86_64/system/apex/com.android.art.capex\n  Compare the output before and after this CL.\nTest: m test_com.android.art deapexer\n      deapexer info \\\n        out/target/product/vsoc_x86_64/obj/ETC/test_com.android.art_intermediates/test_com.android.art.apex\n  Compare the output before and after this CL.\nBug: 184148353\nChange-Id: I0d9c2a090702a95551208aad4be97ea867004a3c\n"
    },
    {
      "commit": "f5958f8881e299c42ac923e4751f8f34d72db7f0",
      "tree": "db15e90ad9152c5cbd9515209841c7e71764a67f",
      "parents": [
        "1282f3805b1b6f50761f3e136d569e85dbda7090"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 02 14:48:14 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 24 07:54:05 2021 +0000"
      },
      "message": "Add x86 implementation for nterp.\n\nBug: 112676029\nTest: test.py, run-libcore-tests, run-libjdwp-tests\nChange-Id: I06bd2c9dde6834f371f042fadda2ced23e02b7ed\n"
    },
    {
      "commit": "1282f3805b1b6f50761f3e136d569e85dbda7090",
      "tree": "eaf74fab46eb96d51e327676e734a139afbe5fef",
      "parents": [
        "7f0473851d9a8d5644fde8c483390a985c238433"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jun 21 20:22:12 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 23 19:22:50 2021 +0000"
      },
      "message": "Add sampling support in the metrics reporter\n\nThe sample rate percentage can be configured via 2 runtime\nflags (MetricsReportingMods and MetricsReportingNumMods).\n\nA runtime session will report metrics if and only if its\nsession id % MetricsReportingNumMods \u003c MetricsReportingMods.\n\nA value of 0 on the mods will effectively disable reporting,\nwhile configuring MetricsReportingMods to be equal to the\nMetricsReportingNumMods will enable reporting in all cases.\n\nTest: gtest\nBug: 170149255\nChange-Id: Ie1353e4fc0ff695fc627696145d95e9ccd3c6a94\n"
    },
    {
      "commit": "7f0473851d9a8d5644fde8c483390a985c238433",
      "tree": "c2aa685e339d731ffcd5b29ccef16c1d2611adb9",
      "parents": [
        "6c30777a278d24e1a4c3226405416a85e6523d3f"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Thu Jun 17 16:28:46 2021 -0700"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Jun 23 17:18:33 2021 +0000"
      },
      "message": "[metrics] Add GC-work throughput metrics\n\nTrack work done (bytes processed) per second by the GC.\n\nSome other minor changes:\n1) Adjusted ConcurrentCopying class member\u0027s order to make access to\nthem more cache-access friendly. Counters accessed by GC-thread should\nnot be in the same cacheline as the one containing counters meant for\nmutators, if either of the two modify those counters.\n2) Increased max to 10\u0027000 for throughput histograms in case\nthe throughput is \u003e GB/s\n\nBug: 191404436\nTest: manual\nChange-Id: Iefaf1106690b6bae670a3a917f61194b3fcacfe0\n"
    },
    {
      "commit": "df0db3b60895184d164812fc1072957aa763f527",
      "tree": "f8de32e6e29ee8bca954fcaa6dd1e6fcab5299df",
      "parents": [
        "a5082496431781271a0b363a567e6de793c3ec0c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 22 10:53:06 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 23 13:40:20 2021 +0000"
      },
      "message": "Allow creating MethodType inside a transaction.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 188889082\nChange-Id: Ib7e0f431e968ee2ca75e09e84b9a8e1b6e29674e\n"
    },
    {
      "commit": "ec11cf1e4a7400af1befae3a5194206f16a58047",
      "tree": "613b1e67a1b8b28209a8e893374eb93d50d1a3b0",
      "parents": [
        "9b8d8198236b73489a28f46a1b62220da471c4b2"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jun 17 15:41:08 2021 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 23 02:28:17 2021 +0000"
      },
      "message": "Add period reporting to the metrics infra\n\nThe metric reporting can now be condifured to report at\ndifferent periods, according to a predefined spec.\n\nThe period spec is given as a string (e.g. \"S,1,2,4,8,*\")\nand can specify:\n  - startup reporting\n  - fixed period reporting\n  - continuous reporting\n\nFor example \"S,1,2,4,*\" means that we will report at\nstartup, then after 1 seconds, then after 2 and 4,\nand finally, that we will continue to report every other 4s.\n\nThe specs for system server and the apps are given by different\nflags, so that we can have different reporting configurations\nfor each.\n\nAlso, this CL adds much more robust testing to the metrics\nreporter, something that was missing before.\n\nTest: gtest\nBug: 170149255\n\nChange-Id: Ifbe32b3877d2e1cdf43d30b67672f6ebfb42dadf\n"
    },
    {
      "commit": "d9696b79c886b9a23b4a77063fac4a3e03e0406d",
      "tree": "9a850d015fcaca721e9309b777f2775202ae3672",
      "parents": [
        "59edf4b8f09d02c10fa87831573151c6b99c3149"
      ],
      "author": {
        "name": "Stelios Ioannou",
        "email": "stelios.ioannou@linaro.org",
        "time": "Mon Jun 14 15:49:26 2021 +0100"
      },
      "committer": {
        "name": "Stelios Ioannou",
        "email": "stelios.ioannou@linaro.org",
        "time": "Tue Jun 22 10:04:04 2021 +0100"
      },
      "message": "ART: Fix for no-opt debug (-O0) builds\n\nCurrently, the build process of debug builds with no optimization fails\ndue to missing symbol definitions.\n\nFor example, it throws errors like the following one:\n\nld.lld: error:\nundefined symbol:\nart::gc::collector::MarkSweep::MarkStackTask\u003cfalse\u003e::kMaxSize\n\nThis patch changes the missing symbols from constants to constant\nexpressions as a way to fix those issues. The optimized builds\nget away with this issue because the values are optimized\nto be inlined and not referenced.\n\nThe code at https://godbolt.org/z/3oYKoPzGj depicts similar\nbehaviour. Additionally, there are comments describing why\nthis issue occurs.\n\nTest: ART_DEBUG_OPT_FLAG\u003d\"-O0\" art/tools/buildbot-build.sh --host\n\nChange-Id: I66b5cfc885dfdfc82e3e4008b1e40fd68c19c999\n"
    },
    {
      "commit": "1ff9056b87705e251501ea4d19280a7e4fe2d009",
      "tree": "aefef09122429a3960d810033443c461f73b5023",
      "parents": [
        "c893d1597b2e653659e0bc73cc2640590d01e8b0"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 16 14:37:42 2021 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jun 21 14:27:16 2021 +0000"
      },
      "message": "Move metric reporting config to flags\n\nThis will enable us to enable periodic reporting according\nto the properties set in the device config.\n\nAs part of this CL, enable cmdline only flags for thing that\ndo not make sense to read from system properties.\n\nTest: gtest\nBug: 170149255\n\nChange-Id: I99bae25d89cf3a17906b4d3c671e5c63e9a3c180\n"
    },
    {
      "commit": "4ef36490afb1cfa6a29442c8d76938ec9fd9b9dc",
      "tree": "6c704a77c182cdca46e210f05c539c4723123056",
      "parents": [
        "d5abbb91247742d2bd8c4fc0adf60ad0512c0dfe"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 16 17:26:51 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 21 12:05:56 2021 +0000"
      },
      "message": "Fix missing nterp initializing when loading a class.\n\nFor instance methods, we were not setting the nterp entrypoint.\n\nTest: test.py\nChange-Id: If3c5e0d30120e50b98340e11ca576de219741990\n"
    },
    {
      "commit": "869746ef31936f09a93717ee1ef3960f8fb6dd69",
      "tree": "b7c534bc792b8128ee6d53089692e6b5477482c0",
      "parents": [
        "f5690ca22446968e6c28ebb06b1d7451e02e203d"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Jun 14 14:13:14 2021 -0700"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jun 17 08:22:41 2021 +0000"
      },
      "message": "runtime: fix potential NULL dereferences\n\nif `found` or `ret` isn\u0027t found, one or both of them may be NULL. hence,\nwe shouldn\u0027t be unconditionally calling `-\u003ePrettyField()` here.\n\nBug: None\nTest: TreeHugger\nChange-Id: Ia40dd0e726d04945d3dedf5c2beb6dd2cff84c21\n"
    },
    {
      "commit": "f5690ca22446968e6c28ebb06b1d7451e02e203d",
      "tree": "1c52e247ff3a115cb0992d921df0229bcaca6b44",
      "parents": [
        "b3a4e01448a32b2dc53cad8a981ed7c75d12d2cc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 16 14:27:34 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 16 16:57:28 2021 +0000"
      },
      "message": "Reject a vdex file if its dex contents are out of date.\n\nThis will make sure the runtime doesn\u0027t think the APK optimization state\nis \"verify\", when at runtime we\u0027ll actually run from the APK\n\nTest: m\nBug: 191245631\nChange-Id: I46e056e52d1f7ff4a4ec8d952f325c54d9efad8f\n"
    },
    {
      "commit": "f667c33fc88356aa80d455430752719aaae57717",
      "tree": "ab752c06377a4db0855b307f8d9b806065820794",
      "parents": [
        "319333f6ea3408b8c99bd9c644f0f34b66fe31b8"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Thu May 27 11:35:44 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 16 16:52:52 2021 +0000"
      },
      "message": "Avoid opening BCP jars if the corresponding FDs exist\n\nWith -Xbootclasspathfds, we already have the FD available in the\nruntime. When loading a BCP oat, it also needs to check the\ncorresponding BCP jar. When the jar\u0027s FD is available, this change\navoids the open by path.\n\nBug: 187327262\nTest: odrefresh --force-compile  # success\nTest: strace  # no more open for such case\n\nChange-Id: I8c488254d9bf923a2e181f578c9ed167cd75335c\n"
    },
    {
      "commit": "ecaf7d1657d8e92697775d3979ff42c59e5cfc89",
      "tree": "e6bd3743161e513234b08cecf78531e2fe6ec372",
      "parents": [
        "7f21ebe84b726081874cd2bd3fc8dd1ea39aa2d8"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Mon Jun 14 11:09:21 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 15 16:17:49 2021 +0000"
      },
      "message": "Fix double close in dex2oat when BCP is passed as FDs\n\nBug: 191052821\nTest: Modify odrefresh to pass BCP as FDs to dex2oat. Run w/ --force-compile.\n      # With thix fix, no longer seeing \"fdsan: double-close of file\n      descriptor 24 detected\"\n\nChange-Id: Iac09b06c8e7aa93114896632cdea6c610662455b\n"
    },
    {
      "commit": "0886d4e7e0243a02c081d6015de88e10f7eb79f5",
      "tree": "7ccd33cabb120ee814001975e8469cdd5cfe5bc9",
      "parents": [
        "40261171630159bfd46043c996be8521c453fee1"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jun 14 17:59:42 2021 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jun 15 09:41:47 2021 +0000"
      },
      "message": "Revert \"Enable strict gcstress unwind checks.\"\n\nThis reverts commit 022f9e555bbad95b3e8699731ca5455151dfca8a.\n\nReason for revert: Strict unwind checks are breaking ART run-test\n`1963-add-to-dex-classloader-in-memory` in gcstress mode; disable\nthem until a proper fix is found for this test failure.\n\nTest: Run `1963-add-to-dex-classloader-in-memory` with gcstress\nBug: 190805741\nChange-Id: Ic9afab0e5f8571c75c8bde8270a7655a6343c35e\n"
    },
    {
      "commit": "40261171630159bfd46043c996be8521c453fee1",
      "tree": "3cae9dfcfd5f745b61da630d031eff4f67fe9185",
      "parents": [
        "af5d304844cd8e39fcc31ca4e07e3e887d2f0bd9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 10:59:51 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 17:55:51 2021 +0000"
      },
      "message": "Rewrite static/instance field search by index.\n\nThe old search was looking for a field with the given field\nindex in the class as well as superclasses and, for static\nfields, all interfaces. This was useless as as a field index\ncan match only in the declaring class. So, if the field was\nnot found in the declaring class we would have unnecessarily\nsearched wrong classes before resorting to string search.\n\nReuse the optimized `Class::FindField` by turning it into\na template implementation that can skip unnecessary static\nor instance field searches. Implementing the static and\ninstance field search this way allows ClassLinker to call\nonly one overload of `Class::Find{Static,Instance}Field`\nand helps avoid string searches in more cases.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nBug: 181943478\nChange-Id: I23309c87c3702d98812adfec0279c483c9037f2c\n"
    },
    {
      "commit": "b10668cb6a34398eb720f9a6305ff9a51b3ebfd4",
      "tree": "ab155a0ae3c2966c20a3de68dbf53e6fe2ced86a",
      "parents": [
        "893e2edbd5aa14ab2ccb1800ccd3154f21a2d8a7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 10 09:52:53 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 12:51:59 2021 +0000"
      },
      "message": "Clean up Class::GetDirectInterface().\n\nFetch array interfaces from the `IfTable`. This removes the\nonly use of the `Thread* self` argument, so we can remove\nthat argument. We also make the function non-static to avoid\nthe explicit `klass` argument. Similarly clean up arguments\nof `Class::FindClass()` and `Class::FindStaticClass()`.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Id639b675b4eb331a777cf318eb61bd19e05de4f0\n"
    },
    {
      "commit": "a09d8b7d4cb6f35f12f2bd2ed4e04a0eb129eeea",
      "tree": "79587d30dda7acb00545333067596dfcfa11bdb6",
      "parents": [
        "e300c4e4eabe3388b730efe35561e54f1c306710"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Mon May 24 14:21:55 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jun 10 15:22:02 2021 +0000"
      },
      "message": "Add runtime option -Xbootclasspathfds: for pre-opened fds\n\nThe new option allows the client to pass a pre-opened fds to the\nruntime. The number of elements must match the number of BCP jars\nspecified in -Xbootclasspath. An fd of negative number is a valid\noption, in such case the runtime will still open the jar in the\ncorresponding path in -Xbootclasspath.\n\nExample: -Xbootclasspathfds:10:11:-1:12\n\nThe option is currently only used in \"unstarted runtime\", but will also\nbe used elsewhere in the follow-up changes.\n\nBug: 187327262\nTest: patch odrefresh to use the option, no longer seeing such openat(2)\nTest: m test-art-host-gtest\n\nChange-Id: I1bebbd80136419c03ac1309a8cb8229a0fd69838\n"
    },
    {
      "commit": "e300c4e4eabe3388b730efe35561e54f1c306710",
      "tree": "1866d5772e2c3643f30aa32b7bf0c02cec2e4c18",
      "parents": [
        "f761f5887918375b842e4cc62ed9cbe7521c8444"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 08 16:00:05 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 10 13:47:14 2021 +0000"
      },
      "message": "Faster Class::FindField().\n\nChange `Class::FindField()` to take dex cache and type index\narguments instead of strings and optimize it similarly to\n`Class::FindClassMethod()`, namely search by indexes when\npossible (except when searching interfaces where we only add\na TODO comment for now) and avoid `strlen()` calls for ASCII\nnames and type descriptors.\n\nUpdate `ClassLinker::FindResolvedFieldJLS()` to pass the new\narguments and replace all other `Class::FindField()` calls\nwith more direct calls as we know the classes where those\nfields are defined.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Iba798819043eb1b53b0dbc41ef8d7fd1c5d2164d\n"
    },
    {
      "commit": "094b1cfc9fa9e1c02238a2352c190be1746f5622",
      "tree": "2ce218587228aafd5cdaf3bd17ee2cecde484957",
      "parents": [
        "4f6bb446f8fbaa192f4e5b69734414c66d5e1bae"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jun 08 09:28:28 2021 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 09 11:34:22 2021 +0000"
      },
      "message": "odrefresh: enable loading of system_server image files\n\nFix check in ValidateBootImageChecksum() to account for image files\nwith multiple components which exists for boot-framework when\ncompiling on device.\n\nUpdate logic for only_load_system_executable to be\nonly_load_trusted_executable and treat /system and the ART APEX data\ndirectory as trusted.\n\nAdd test to check .art,.odex,.vdex files derived from the\nsystem_server classpath are mapped when the ART module updates.\n\nAdd test to check .art,.oat,.vdex files for the boot class path\nextensions are present in the zygote processes.\n\nBug: 180949581\nTest: atest com.android.tests.odsign.OnDeviceSigningHostTest#verifyGeneratedArtifactsLoaded\nChange-Id: I3114fc6393402d8da2eb16ba756ab5fab713dc20\n"
    },
    {
      "commit": "4f6bb446f8fbaa192f4e5b69734414c66d5e1bae",
      "tree": "c07c8cf278137c14fda476ed682968ee3c01c65f",
      "parents": [
        "beb9f2012587035a5c30d0eca8af458b2ad659b7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 02 18:05:51 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 09 11:03:12 2021 +0000"
      },
      "message": "Remove palette hooks.\n\nMake the method be part of the official palette API.\n\nBug: 186016399\nBug: 185778652\nChange-Id: I3dc9e879c647fd63f5826091813613fd97e25c0d\n"
    },
    {
      "commit": "beb9f2012587035a5c30d0eca8af458b2ad659b7",
      "tree": "ebc2509c9d3250d47e6e54c2c67f2f4bce74c80b",
      "parents": [
        "f31b75b2b80154112835c25bb0a21196453ac71a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 02 14:42:03 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jun 08 20:58:43 2021 +0000"
      },
      "message": "Consider the size of the reference profile when assessing IsFirstSave\n\nThis makes the detection logic for the first profile save much more\nprecise. It prevents the case where we would return true if\nthe data was already moved from the current profile to the reference\nprofile.\n\nAt the same time, rework part of the logic for early save. The checks\nneeded to be moved earlier to encompass the startup class resolution.\n\nTest: run-test \u0026 manual\nadb shell stop;\nadb shell setprop dalvik.vm.ps-min-save-period-ms 300;\nadb shell setprop dalvik.vm.extra-opts -verbose:profiler;\nadb shell start;\nadb shell cmd package compile com.android.systemui -r bg-dexopt\nrestart \u0026 check\n\nBug: 185979271\nChange-Id: Icfec30c6f49c8e03b03ff4bcbc2b869393fdcbfe\n"
    },
    {
      "commit": "4573be38b0fb938c1177b8aa474e980c64ab5587",
      "tree": "ac2a02e6e40c60c7b6bede1c863f376882deb594",
      "parents": [
        "b89e731029b61d66aa8c44f188bce48ec59a733e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 07 11:07:05 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 08 14:34:40 2021 +0000"
      },
      "message": "Faster Class::FindClassMethod().\n\nAvoid using `strlen()` on ASCII strings from DexFile.\nThis was a missed opportunity in\n    https://android-review.googlesource.com/963405 .\n\nAlso optimize iteration over declared methods of a class.\nLoad the dex file before the loop and avoid the runtime\nmethod check in `ArtMethod::GetMethodNameView()` by using\nthe `DexFile` interface directly.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I1ce3659b7f1fbcfc11d52626f9feb9be666d1161\n"
    },
    {
      "commit": "977abde30ffe7a8c9a108498468f00b279191497",
      "tree": "90f4f97e939609f6835b09d19cb14f5e434c0d9b",
      "parents": [
        "9ed2427971bcaf439afd12b8a1ec375ea78edd2b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 07 14:29:05 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 08 11:21:26 2021 +0000"
      },
      "message": "Move code around in x86 assembly files.\n\nSo nterp x86 can use the helpers.\n\nTest: m\nBug: 112676029\nChange-Id: I570847e3e5ee0b49e951e05a118f8f4ec8753352\n"
    },
    {
      "commit": "04c9f3a978f3e219e7d407f08f4063b3fbb53907",
      "tree": "5360195b36cb3d2976fd1601b23441e534c6aac5",
      "parents": [
        "1e7faf706563593de8e9d47bb5ef366f68dce1a2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 04 09:51:28 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 07 08:09:55 2021 +0000"
      },
      "message": "x86: Don\u0027t use the GOT to access art::Runtime::instance_.\n\nAnd also get the address of art_quick_instrumentation_exit\nwithout going through GOT.\n\nBecause ART is built with -fvisibility\u003dprotected, the\nlocation of these symbols can be statically resolved by the\nlinker, so there is no need to go via the GOT.\n\nAlso rewrite macros to avoid the __x86.get_pc_thunk.bx and\nuse a local `call +0` instead.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --32 --optimizing --interpreter\nBug: 112676029\nChange-Id: Ib63aa71518ab7c015626a99a0bbfc587032f4a76\n"
    },
    {
      "commit": "1e7faf706563593de8e9d47bb5ef366f68dce1a2",
      "tree": "4e65e4a59cc3cf95f82149f0fb417a4beba8e893",
      "parents": [
        "530552ac735c59a3ae44b16f751df265e820dad2"
      ],
      "author": {
        "name": "Sorin Basca",
        "email": "sorinbasca@google.com",
        "time": "Thu May 27 13:05:22 2021 +0000"
      },
      "committer": {
        "name": "Sorin Basca",
        "email": "sorinbasca@google.com",
        "time": "Mon Jun 07 08:01:11 2021 +0000"
      },
      "message": "Use tinyxml2-based generated Apex Info List sources\n\nWe can reduce the size of odrefresh and runtime binaries by switching from\nlibxml2 to libtinyxml2. The dependency comes from the usage of the Apex Info\nList.\n\nSince the xsdc tool has been updated to have a new option, -t/--tinyxml, which\ngenerates the source files that use the libtinyxml2 API, we should use this\nfeature to gain the binary size advantage.\n\nSize of odrefresh when using libxml2: 444752\nSize of odrefresh when using libtinyxml2: 137724\n\nBug: 177209057\nTest: m\nChange-Id: I5c92d44f9ccbe94507a2dd8653814451ed10c645\n"
    },
    {
      "commit": "530552ac735c59a3ae44b16f751df265e820dad2",
      "tree": "2ca5654c5152df395af60811ceb0dc891e1137b7",
      "parents": [
        "bbc4dc3f98bdc2f984371b39ea5a96d85a3ab2a1"
      ],
      "author": {
        "name": "wangguibo",
        "email": "wangguibo@xiaomi.com",
        "time": "Sun Jun 06 09:26:07 2021 +0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sun Jun 06 18:35:48 2021 +0000"
      },
      "message": "Fix DumpUnattachedThreads logic for CTS.\n\nThe thread should not be in thread list when dumping from\nDumpUnattachedThread.\n\nBug:140968481\nBug:188918448\nBug:188918454\nTest:CtsWindowManagerDeviceTestCases android.server.wm.AnrTests\n\nSigned-off-by: wangguibo \u003cwangguibo@xiaomi.com\u003e\nChange-Id: Icc4c7907c5386280c04d8e56496361e32cbac350\n"
    },
    {
      "commit": "09eacd9a5d982687b68031a884e4daaa11560f0c",
      "tree": "79a7fdac9c3330e850d05028cf95b3de6cb108a3",
      "parents": [
        "341be9e71c8dbb1f6e29e860336e8e4944d54c63"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed May 19 17:03:55 2021 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jun 03 19:35:14 2021 +0000"
      },
      "message": "Setup ART experiments infra\n\nAdd a flexible class for ART Flags that can take their\nvalues from cmdline arguments, system properties or\ndevice config settings.\n(the flags concept is evolved from Eric\u0027s previous CL\n3dba023d4fb47882fa215715c196cfa3be30c098)\n\nPlumb the loading/re-loading of flags in the runtime\ninitialization and after forking from zygote (so that\nwe don\u0027t require restarts to refresh the flags).\n\nIf multiple values are given for the same flag the\nevaluation order is:\n1) device config (configurable from server side)\n2) system properties\n3) cmdline arguments\n4) the default value\n\nThe existing cmdline arguments are not migrated to the\nnew infra and will be done only on a per need basis.\n\nTest: gtest \u0026 manual\nBug: 181748174\nChange-Id: If3940393493af1052367d725a3f2aa94eee927c2\n"
    },
    {
      "commit": "341be9e71c8dbb1f6e29e860336e8e4944d54c63",
      "tree": "bf2ece6bb127d67143395be9caf70cecc8bdddd6",
      "parents": [
        "6031ec1e5d916c3537dbbacb14bc16c6fff4bf3c"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Jun 02 18:21:35 2021 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jun 03 18:29:57 2021 +0000"
      },
      "message": "Revert \"Do not sleep while waiting for GC\"\n\nThis reverts commit bcec38f7b7dc92d89ce9d49b8c1ba9afe87dab6b.\n\nIt thereby relands the missing piece of aosp/1690649 .\n\nReason for revert: b/189955496\n\nPS2 resolves conflicts with the recently added checking code,\nwhich should make this fail more conspicuously if we still have\nbugs in this area.\n\nBug: 189955496\nTest: Build and boot AOSP\nChange-Id: I239426d2e25791e68a41c211ba08bb99f1494185\n"
    },
    {
      "commit": "95313c5d14447ff5d75f51263bfd82fc6352dd72",
      "tree": "bfbeeb83a876b3ab754bee6d1bfb4c7c0ca193ad",
      "parents": [
        "6b60a36ad10110933e53e4094b784946baf991b8"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Jun 02 14:07:56 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jun 03 04:31:18 2021 +0000"
      },
      "message": "Delete spurious gc_type assignment\n\nIt serves no apparent purpose and provides misinformation.\n\nBug: 189830999\nTest: Build and boot AOSP\nChange-Id: I96dd0c5ec93cc1db386b388123ec541a6617decc\n"
    },
    {
      "commit": "6b60a36ad10110933e53e4094b784946baf991b8",
      "tree": "6d46a2850e16e9676abeeabafb5270982ca3a2bc",
      "parents": [
        "8ef8ad5ab4f1510b0a7faa6d7c5db7e66b58f083"
      ],
      "author": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Fri May 21 17:18:49 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 02 22:18:43 2021 +0000"
      },
      "message": "[metrics] Rename datum IDs\n\nThe new names make it clearer which ones are counters or histograms,\nand what the units are for each one.\n\nBug: 170149255\nTest: m\nMerged-In: Ia7477bd84111fc42108ddaa20b1e50c6ceaeed71\nChange-Id: I179e1b90e8a974eb2282f8f06853b4848cc33acc\n"
    },
    {
      "commit": "dd446b17bedb28838f5866f7c29fb47265f332fc",
      "tree": "452e7b258216b720a9407ab0255a01636f0135e6",
      "parents": [
        "20e77ff50047e62e90b3ce9b7849777ffcd55b0d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 20 14:35:51 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 02 08:38:20 2021 +0000"
      },
      "message": "Collect array classes in profiles.\n\nCollect array classes including primitive array classes for\nboot class path profile. Do not exclude resolved erroneous\nclasses, they can still be useful as resolved even if the\nruntime intialization fails.\n\nOptimize the performance, especially the time we need to\nhold the mutator lock. Use that fact that most `ArtMethod`\nmembers can be queried without the mutator lock.\nRemove the GC critical section as it is unnecessary.\n\nTest: Collect a profile by manually running steps from\n      BootImageProfileTest#testSystemServerProfile,\n      pull and dump the profile and check that there are\n      many array classes, including \"[[[B\" and \"[[[I\".\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --speed-profile\nBug: 148067697\nChange-Id: I76276d61551c16f532a0e34289bab4acb61b30c6\n"
    },
    {
      "commit": "20e77ff50047e62e90b3ce9b7849777ffcd55b0d",
      "tree": "8877f8f91f3d2cafefac601e62f169009a52f4ea",
      "parents": [
        "1d326f94a3fdd6292ccdf0022cedfb2a2b8acfee"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 26 21:00:46 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Jun 02 01:21:36 2021 +0000"
      },
      "message": "Ensure that ConcurrentGC always increments GC num\n\nConcurrentGC could end up waiting for a GC type like TrimSpaces()\nthat does not actually end up incrementing completed_gcs_.\nIt would erroneously think it was done, leaving gcs_requested_\n\u003e gcs_completed_, with no task running to perform the requested\nGCs, but further requests getting ignored until the next explicit\nor heap-overflow GC.\n\nMake ConcurrentGC() actually perform a GC unless the GC number\nwas incremented. Add a CHECK in ConcurrentGCTask::Run that can catch\nthis. (Confirmed because it did catch it before we added the fix.)\n\nHave RequestConcurrentGC() return a bool to indicate whether it\ndid anything. This makes another CHECK possible, and should\neventually allow us to again sleep() until a GC starts.\n\nBug: 186592536\nBug: 189150802\n\nTest: Build and boot AOSP\nChange-Id: Ib11734a9c87b9f9e19c5a3557eac9024f84cadf3\n"
    },
    {
      "commit": "1d326f94a3fdd6292ccdf0022cedfb2a2b8acfee",
      "tree": "17fde709095f46eff040585e694b621676e5d0c0",
      "parents": [
        "654f01cd509ca11eae22177d4e764f1241fb3a53"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 01 09:26:55 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 01 12:50:50 2021 +0000"
      },
      "message": "Avoid race on Thread::tlsPtr_::top_handle_scope.\n\nRequire mutator lock for that field and update tests to hold\nthe mutator lock when needed. This prevents GC thread that\nexecutes a thread roots flip on behalf of suspended threads\nfrom racing against construction or destruction of handle\nscopes by those threads and possibly seeing invalid values.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 189439174\nChange-Id: I268a0ef6e5aa838347956febca0d3b6e02fe3ae5\n"
    },
    {
      "commit": "654f01cd509ca11eae22177d4e764f1241fb3a53",
      "tree": "d17db438be0691a5e4e6b4721b670530e336690e",
      "parents": [
        "028c7efaf7321a1e253fb4d9dcc5d85e8a9e6d68"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 26 16:40:20 2021 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri May 28 00:31:54 2021 +0000"
      },
      "message": "Fix lock visiting for synchronized native methods.\n\nThe `GetGenericJniSynchronizationObject()` function was used\nin the wrong context. As documented, it can be used only for\na method with a GenericJni frame and also on the top of the\nstack. When visiting locks, we can have a non-GenericJni\nmethod frame as well as a method deeper in the stack.\nReplace the wrong use with specialized code.\n\nTest: Added regression test to 178-app-image-native-methods\nTest: testrunner.py --host --debug --ndebug\nBug: 172332525\nBug: 189235039\nChange-Id: Ia26f0b980c04a766e31b1588a1c011bcf46c90d8\n"
    },
    {
      "commit": "028c7efaf7321a1e253fb4d9dcc5d85e8a9e6d68",
      "tree": "27631b722b16cc7a71de86e847fe023ccf01a384",
      "parents": [
        "e8efdaa09b7ff36d5a986f0320f29ac4a7563896"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed May 26 15:37:00 2021 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 27 19:42:00 2021 +0000"
      },
      "message": "Use verify when speed-profile gets an empty profile\n\nChange the compiler filter to verify if we need to compile\nspeed-profile but we don\u0027t get a profile, or the profile is empty.\nThis will improve the clarity and the precision of the telemetry\ndata which usually expects speed-profile to outperform verify.\n\nTest: gtest\nBug: 188655918\nChange-Id: I215552e0001d56df0e0d676721f0a741ef2573be\n"
    },
    {
      "commit": "e8efdaa09b7ff36d5a986f0320f29ac4a7563896",
      "tree": "5066cecab43006a7bf23f793aa911f74559c8017",
      "parents": [
        "ae553e0e1b26d95006aa27df4675104bfb55d49d"
      ],
      "author": {
        "name": "Christian Wailes",
        "email": "chriswailes@google.com",
        "time": "Wed May 26 17:33:54 2021 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 27 19:28:16 2021 +0000"
      },
      "message": "Revert \"Remove stack protector from some interpreter functions\"\n\nA performance regression was noticed in go/lem banchmarks for ART.  This\nis likely caused by the no_stack_protector attribute preventing inlining\ninto hot functions.\n\nReason for revert: performance regression\nReverted Changes:\nIe0c81f97f:Remove stack protector from some interpreter funct...\nIaf565a374:Reset stack guard after fork from Zygote\n\nBug: 168258494\nChange-Id: I018d58759c3a5bb624ea8e7fe09b6b49c9b19b6a\n"
    },
    {
      "commit": "bdf1737bd17132525bcfdc778663123b61e97fa3",
      "tree": "ec097408de25394ac6444ae0589fcfa41d400257",
      "parents": [
        "f2d1a510bf36f98e0607f0527299789a64d755c9"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu May 06 00:19:19 2021 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu May 27 13:28:37 2021 +0000"
      },
      "message": "Introduce `art::FastExit` to replace all uses of `quick_exit` in ART.\n\nNo longer use `quick_exit(3)` in ART, as it does not play well with\nClang\u0027s code coverage instrumentation (see b/187935521 and\nb/186576313). Replace all its uses with a new routine,\n`art::FastExit`, calling either `exit(3)` when ART is built with\nClang\u0027s code coverage instrumentation (in order to dump coverage\nprofiles when the program terminates) or `_exit(2)` otherwise (to exit\nquickly).\n\nFunction `art::FastExit` is implemented as part of the\n`art_libartbase_headers` header library, so that it can be used easily\nin `dalvikvm`.\n\nTest: mmma art\nTest: ART tests\nBug: 186576313\nBug: 187935521\nChange-Id: I7b4f86f6f0e7b12814684ecea73a2ed0ef994395\n"
    },
    {
      "commit": "d196f661fae8473dedfd4b544c6873144202bc78",
      "tree": "86cfc190bd2a5e57a86e10f3ae5606643bb25c84",
      "parents": [
        "46bf0f2c4423bc6e7c59b228d5c4a17e4a4e6200"
      ],
      "author": {
        "name": "Nikita Iashchenko",
        "email": "nikitai@google.com",
        "time": "Tue Apr 27 18:31:03 2021 +0100"
      },
      "committer": {
        "name": "vichang",
        "email": "vichang@google.com",
        "time": "Wed May 26 00:26:18 2021 +0000"
      },
      "message": "Rename setters to conform Android API guidelines\n\nBug: 184654804\nTest: m droid\nChange-Id: I6ae5dd363bdb32cea6acd9dab7afbd4579fb0c4c\n"
    },
    {
      "commit": "abe7c69edb5ff8f9a4b8019d475caa2f35085aa7",
      "tree": "d8d86bf8c2264897eb9f7cf35be7c523f611688e",
      "parents": [
        "571a6bea24452e9b288106f379c7510c380a7f61"
      ],
      "author": {
        "name": "Chris Wailes",
        "email": "chriswailes@google.com",
        "time": "Wed May 12 17:16:50 2021 -0700"
      },
      "committer": {
        "name": "Christian Wailes",
        "email": "chriswailes@google.com",
        "time": "Tue May 25 17:47:38 2021 +0000"
      },
      "message": "Remove stack protector from some interpreter functions\n\nThis CL removes stack protection from several functions in the\ninterpreter to allow us to re-set the stack protector cookie when new\nprocesses fork from any of the zygotes.\n\nTest: boot\nTest: atest KeyboardVisibilityControlTest\nBug: 168258494\nChange-Id: Ie0c81f97fedfcdde7afc1b6b4befa65524724194\n"
    },
    {
      "commit": "9d27fbc8ced914f4726187920a7794b07eca3e71",
      "tree": "0fd6eb99d0766ac78513d650d629f217273ab294",
      "parents": [
        "e3124d26d725a2b042b4409abfb30a39bb76794d"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri May 21 09:23:38 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue May 25 16:34:18 2021 +0000"
      },
      "message": "Improve suspension timeout diagnostic and fix race\n\nFix a data race on state_and_flags. Since the access was volatile\nand there are system calls in the loop, this is extremely unlikey\nto have casused the bug here, but ...\n\nSo, assuming this is still broken, produce more informative\noutput once we time out.\n\nRemove unused argument from SuspendThreadByPeer(). It made the\nlogic more complicated and made it harder to reason about\ncorrectness.\n\nRemove dead code after LOG(FATAL, ...)\n\nBug: 181778559\nTest: TreeHugger, temporarily paste log message into hotter path.\nChange-Id: I6f3455925b3a3f4726a870150aeb54ea60a38d67\n"
    },
    {
      "commit": "3156695aa5a69e3ca27b5befcaf0934e7e62e9fb",
      "tree": "64977ebf92e992ce978cd1d5a4e378a12463522b",
      "parents": [
        "61ffd049d8d6946ba52884a8f679dde0e3a6654d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon May 17 11:56:40 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon May 24 23:22:57 2021 +0000"
      },
      "message": "Enable ProfileSaver to have a different delay for the first ever save\n\nThe runtime now supports -Xps-first-save-ms, which when configured\nmay alter the delay for the first ever profile save. Subsequent\nsaves will proceed based on the existing -Xps-min-save-period-ms.\n\nThe first ever save is an approximation, and computed by checking\nthe profiles size.\n\nTest: gtest \u0026 manual\nBug: 185979271\nChange-Id: I7119b9d2b8829653046565426090c89f6a619a27\n"
    },
    {
      "commit": "61ffd049d8d6946ba52884a8f679dde0e3a6654d",
      "tree": "6ce3787caae6d00bfb30165786fe40d42a86e045",
      "parents": [
        "6d8d68efbe2101e2d5fdf078556cbc1f286c37c7"
      ],
      "author": {
        "name": "Victor Hsieh",
        "email": "victorhsieh@google.com",
        "time": "Thu May 20 15:14:25 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon May 24 20:05:49 2021 +0000"
      },
      "message": "Make the runtime option -Ximage a ParseStringList\n\nPreviously, the string spliting is done in multiple code locations,\nincluding ImageSpace::BootImageLayout::LoadOrValidate and\nGetPrimaryImageLocation (which may be called multiple times).\n\nThis change converts the -Ximage option from a string into a\nParseStringList\u003c\u0027:\u0027\u003e.\n\nIt may be worth pointing out that this doesn\u0027t change the current code\nexpectation that each image can have a profile (e.g.\n\"/path/to/foo.art!/some/profile.prof\").\n\nThere is a later plan to introduce new options of boot image fds with\nParseIntList\u003c\u0027:\u0027\u003e. This change would make them more consistent.\n\nBug: 187327262\nTest: boot looks normal\nTest: dexopt looks normal\nTest: TH\n\nChange-Id: I82657cb725cda2d3b782cbe7a6e6d9a871e80ee7\n"
    },
    {
      "commit": "f3e67db05f3551d2a12c3c71ab2432d31b390c06",
      "tree": "ca4ca10141ce9e602c4b5b1850c0293b6b845946",
      "parents": [
        "ca15b8d4b05e374569fd98599b5c395b4aa655c7"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 19 13:58:45 2021 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 20 22:34:20 2021 +0000"
      },
      "message": "Reduce excessive gcstress mode logging.\n\nIncrease the default log thresholds by 10x in gcstress mode\nto silence most logging (but still log pathological cases).\n\nOn the other hand, still log at least one GC per 10 seconds,\nso that we preserve some informational value and progress.\nFurthermore, the sampling is biased to reporting expensive GCs.\n\nBug: 170871390\nTest: jdwp tests in gcstress mode.\nChange-Id: I1747f0af3dcf313d9eb1a657bdfb8e0802f74993\n"
    },
    {
      "commit": "3ddf4d4916fdb7bc3157aa375fb1d670f4cf80bb",
      "tree": "45d67decea87e2f47339250a1bc6c253855d977a",
      "parents": [
        "06fb7fa55cca3210f38c92ac7cc7ad525ff30c83"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue May 11 10:19:28 2021 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 20 21:45:57 2021 +0000"
      },
      "message": "Update registerAppInfo signatures to accomodate more data.\n\nTest: m\nBug: 182793486\nBug: 185979271\nChange-Id: Ib92327e39bad5914d48ae8a37dd4b5092c5e1407\n"
    },
    {
      "commit": "26e9e75dc4ef6fbe863651e29aaaeff00edcdf92",
      "tree": "90189425907c2fd8642470a71d65d59a1bb70e7e",
      "parents": [
        "1dc77abf87d303a8f4aa35148c57f7ab20832222"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue May 18 04:16:06 2021 -0700"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed May 19 16:34:14 2021 +0000"
      },
      "message": "Improve OOME log message informing OOME before heap full\n\nWe throw OOME when \u003c1% of the heap is free after GC. We should improve\nthe corresponding log message to clarify why we throw OOME even when\nallocation size is \u003c largest contiguous chunk.\n\nTest: art/test/testrunner/testrunner.py\nBug: 188465700\nChange-Id: I71bf744a3966271ba31f336f7ceb58c848105df7\n"
    },
    {
      "commit": "c07e873ddb17620c18420cf2bfcf76b1978dc291",
      "tree": "40b9fd5f950c3cf3b6e28b9480148bae6e4d8be9",
      "parents": [
        "826e6667c4d543c5c75a4a87d7cceb43f72078d0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 18 14:26:42 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 19 08:41:42 2021 +0000"
      },
      "message": "Use odex_location instead of oat_file-\u003eGetLocation.\n\noat_file might be null at this point.\n\nTest: m\nBug: 177175508\nBug: 183824895\nChange-Id: I945b8a3053ff2ea1967758a621b7e88c3de1f222\n"
    },
    {
      "commit": "07ff2833c7425cef87abad3e21b3f884597dc58c",
      "tree": "a7ab412fa286c7af891aa438b187b6bf9f9f907b",
      "parents": [
        "ca7de40e2d0f1f5c3c29aec2899f6fbe8d7217f3"
      ],
      "author": {
        "name": "Collin Fijalkovich",
        "email": "cfijalkovich@google.com",
        "time": "Tue Aug 25 10:43:12 2020 -0700"
      },
      "committer": {
        "name": "Collin Fijalkovich",
        "email": "cfijalkovich@google.com",
        "time": "Tue May 18 21:23:45 2021 +0000"
      },
      "message": "Compile libart.so and libart-compiler.so with 2MB section alignment.\n\nAdds the appropriate linker flags for libart and libart-compiler to have\n2MB section alignment. This allows the executable segment of these\nlibraries to be backed by transparent hugepages on supporting systems.\n\nBug: 158135888\nTest: Verified ELF format\n\nChange-Id: Ia6455418cf1fdd3a1a98d662bf381db4b58b8536\n"
    },
    {
      "commit": "c3632b1aab9fa47a0193b200b61bbc9ff1374fb6",
      "tree": "de8984b47580239c095a8104a1791a0345d935b4",
      "parents": [
        "7414ec29f15bf9c5c8ad5af5ce45b3f5fc41ce80"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon May 17 15:18:14 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue May 18 15:47:31 2021 +0000"
      },
      "message": "Avoid timeout with \u003e\u003d 1 billion nsecs\n\nRegistering a timeout of \u003e\u003d 1000 msecs produced an error message,\nbut still resulted in a system call with timeout nsecs \u003e\u003d 1 billion,\nwhich would cause an error return from the system call and a crash.\n\nAvoid this by restricting timeouts to the maximum. Also enforce\nminimum for symmetry.\n\nBug: 140968481\nTest: TreeHugger\nChange-Id: I191fb88a03bf09d2c5a93864bb26624c10b6e52d\n"
    },
    {
      "commit": "7414ec29f15bf9c5c8ad5af5ce45b3f5fc41ce80",
      "tree": "90409c332610a466ffeaa6fee1574ba1f824e4db",
      "parents": [
        "0d290721a8d63d5e0d38a64d3ecf922a91becb10"
      ],
      "author": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Thu May 13 17:18:34 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon May 17 21:40:35 2021 +0000"
      },
      "message": "[metrics] Add prebuilt and cmdline compilation reason\n\nTest: manual\nBug: 188104237\nChange-Id: I91cb31ddd178230bc435672b6a657cd9eb572c31\n"
    },
    {
      "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": "c63d9672264e894d8d409e8d582b4e086b26abca",
      "tree": "1e285cbab4c71aea3c8c37b4e4c5e8241a3ce117",
      "parents": [
        "0bf5b6729be507f1e78fc61f17554393dd978e46"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 31 15:50:39 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 17 13:42:11 2021 +0000"
      },
      "message": "Rewrite profile file format.\n\nThe new format contains one mandatory section and several\noptional sections. This allows extending the profile with\nnew sections that shall be ignored by old versions of ART.\n\nWe add an \"extra descriptors\" section to support class\nreferences without a `dex::TypeId` in the referencing dex\nfile. Type indexes between the dex file\u0027s `NumTypeIds()`\nand `DexFile::kDexNoIndex16` are used to index these extra\ndescriptors. This prepares for collecting array classes\nwhich shall be tied to the element type\u0027s dex file even\nwhen the array type is not needed by that dex file and has\nbeen used only from another dex file. It also allows inline\ncaches to be self-contained, so we can remove the profile\nindex from data structures and serialized data.\n\nThe creation of the the binary profile from text files is\nupdated to correctly allow array types to be stored as the\nprofiled classes using the \"extra descriptors\". However,\nthe interface for filling in inline caches remains unchanged\nfor now, so we require a `TypeId` in one of the processed\ndex files. The data collection by JIT has not been updated.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --speed-profile\nTest: boots.\nTest: atest BootImageProfileTest\nBug: 148067697\nChange-Id: Idd5f709bdc0ab4a3c7480d69d1dfac72d6e818fc\n"
    },
    {
      "commit": "a6cb451f4a14a9102f941c7c795e9cbe729ee359",
      "tree": "5012f39bd273086036ede25acb015c7e33907ede",
      "parents": [
        "93c28ed5e8303eed09d6286725029a21293d3f56"
      ],
      "author": {
        "name": "Wessam Hassanein",
        "email": "wessam@google.com",
        "time": "Tue May 11 18:26:33 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri May 14 18:21:18 2021 +0000"
      },
      "message": "Add Java Heap Profiler sampling to large space allocations.\n\nThis cl adds both large space and non-movable allocations.\n\nTest: Passing Tests\nLocal Testing\n\nBug: 160214819\nChange-Id: Ice8950c12bd0ef8d765da21aeb2cc294850b2a07\n"
    },
    {
      "commit": "93c28ed5e8303eed09d6286725029a21293d3f56",
      "tree": "2194b6025407b02be2f87e2e2b597dd7ad0660e7",
      "parents": [
        "2ef367acf3f95ee4c0459b73c3b18613cfa7d74d"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri May 14 14:11:42 2021 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri May 14 17:51:59 2021 +0000"
      },
      "message": "Use the system namespace to get the right permitted paths for loading OAT files.\n\nThe ART namespace doesn\u0027t permit e.g. /product/apps, and there may be\nother locations too that need to be configurable from the system linker\nconfig.\n\nTest: Boot\nBug: 188078687\nBug: 130340935\nChange-Id: Id23c45dec6aef8379b125d70f2a47289f34c5a3a\n"
    },
    {
      "commit": "2ef367acf3f95ee4c0459b73c3b18613cfa7d74d",
      "tree": "193c094b51ab441159f04e40324d4ac51e1d32f9",
      "parents": [
        "833d76f4bdca60ed06a76b3d248ea643efafb844"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 10 14:14:03 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 14 16:46:48 2021 +0000"
      },
      "message": "Ensure verifier deps in the vdex file are 4-byte aligned.\n\nIt simplifies the encoding / decoding logic.\n\nTest: 663-odd-dex-size\nBug: 186405713\nChange-Id: I26bcf2b6cfa16548a520a501e6e1b38c238eb1df\n"
    },
    {
      "commit": "8ffaef9fbd1dc5194dbdcd3405360f8eb1e47a9e",
      "tree": "b73775bad6edbc0884225f40246aee72a2f18e76",
      "parents": [
        "022f9e555bbad95b3e8699731ca5455151dfca8a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 13 12:51:30 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 14 08:22:44 2021 +0000"
      },
      "message": "Remove BUILDING_LIBART macro.\n\nIt has been used only to prevent including the libart header\n`runtime_asm_entrypoints.h` when compiling other targets.\nInstead make symbols in that header hidden so that using\nthem from other targets shall yield a link time error. (This\nis somewhat pointless because the header defines only inline\nfunctions but the actual entrypoint symbols defined in\nassembly are already hidden anyway.)\n\nThis change adds the symbol visibility macros `HIDDEN` and\n`EXPORT` which were originally included in the reverted CL\n    https://android-review.googlesource.com/1137699 .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 186902856\nChange-Id: Ia9fed6b3f49d7356888d702f4ad3bb48e5884793\n"
    },
    {
      "commit": "022f9e555bbad95b3e8699731ca5455151dfca8a",
      "tree": "fd95ab4e9f2234f31c396401e9f116b2251b5e72",
      "parents": [
        "ec06809b9fb7d4a0d2c3e46066bd37034130e53b"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 12 16:46:50 2021 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri May 14 07:56:47 2021 +0000"
      },
      "message": "Enable strict gcstress unwind checks.\n\nReport if we fail to unwind during the gcstress tests.\n\nI have fixed several races and ART unwind issues recently.\n\nThis CL might need to be reverted if I missed anything.\n\nTest: test.py -r --gcstress --target --ndebug\nChange-Id: Ib4de7451bab959be310b4e4a2cb3e448c6e73caa\n"
    },
    {
      "commit": "ec06809b9fb7d4a0d2c3e46066bd37034130e53b",
      "tree": "c3a69b142e38d249a01ed425cde23caa78c1d36c",
      "parents": [
        "1651c6050d913fb38ebd293df9da6d189eb3851d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 10 17:28:32 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 14 07:38:39 2021 +0000"
      },
      "message": "Reland \"Devirtualize to HInvokeStaticOrDirect.\"\n\nThis reverts commit 39d4df62d4e2606073d05cc363370db825ad7b9f.\n\nReason for revert: fix JIT-zygote issue.\n\nTest: JIT zygote boots.\n\nChange-Id: I895ad8e59e472fb662ca9bc5394c2fd9c6babc74\n"
    },
    {
      "commit": "8e270af0b0c1244c5c0ece4fe99116e4156144a3",
      "tree": "d6d7c5166eaba17bb9af9c0c1cb0535a0445384e",
      "parents": [
        "2b527c4f8641f42e6ec917a63614d50d3c4e8821"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 12 16:40:58 2021 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu May 13 17:44:26 2021 +0000"
      },
      "message": "Stricter gcstress unwind checks.\n\nDon\u0027t retry the unwind unconditionally, it masks race issues.\nRetry only if missing proc mmaps are likely cause of the failure.\n\nFail on most unwind errors.\n\nStricter instrumentation exit pc check.\n\nTest: test.py -r --gcstress --target --ndebug\nChange-Id: Idbed80416279717792160fa4531f196d11e909db\n"
    },
    {
      "commit": "3606cc69f5975d7ae81044a51706a6896d148781",
      "tree": "6cb682d7bb8ec086c43caf873b3c854181806be9",
      "parents": [
        "0da7dfc71506d1f6bfa93f0c5fdb33df49dea0e7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 13 10:29:22 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 13 14:25:56 2021 +0000"
      },
      "message": "Do not try to do OSR in transactional interpreter.\n\nTest: testrunner.py --host --optimizing --jit\nBug: 175869411\nBug: 181943478\nChange-Id: I005c532c23d34c16a8b6bd2f7dd464f9ef2a2b75\n"
    },
    {
      "commit": "b1db5a110d312c5a51a52f7f6bc870f9205b6ff8",
      "tree": "9ab0ca4cc92dda3b9ebcbaf32583463e0f25ea86",
      "parents": [
        "f7f97d2c3e847e68f87490e110e192dd587572bb"
      ],
      "author": {
        "name": "Sekyeong Heo",
        "email": "sekyeong.heo@samsung.com",
        "time": "Tue Dec 22 19:38:28 2020 +0900"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 13 08:39:27 2021 +0000"
      },
      "message": "[art] Add GetObjectsAllocated and TotalTimeWaitingForGc APIs\n\nIt\u0027s difficult to analyze sluggish issue due to excessive GC.\nSo, I would like to add APIs for GC status check.\n\nGetObjectsAllocated : return count of allocated objects.\n how to use : Debug.getRuntimeStat(\"art.gc.objects-allocated)\nTotalTimeWaitingForGc : return total waiting time for GC.\n how to use : Debug.getRuntimeStat(\"art.gc.total-time-waiting-for-gc\")\n\nThis must be submitted with the libcore code.\n\nTest: check value using Debug.getRuntimeStat()\n\nChange-Id: I2e865957ddb7e8cb5ac955e65a18d2aaffe4c672\n"
    },
    {
      "commit": "f7f97d2c3e847e68f87490e110e192dd587572bb",
      "tree": "73fa70ebc77fab74eceefd3d477148efccdb38ec",
      "parents": [
        "81a6bd5a05ee3b2bb87ec4a0b471198dbbef3ce3"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Apr 22 21:21:58 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 12 18:52:47 2021 +0000"
      },
      "message": "Avoid invalidating kInstrumented via suspension\n\nMake sure we no longer trust kInstrumented after executing allocation\ncode that may suspend.\n\nDon\u0027t just switch to the new normal allocator if we were originally\nasked for a nonmoving allocation.\n\nDocument the convention we need to enforce.\n\nTest: Build and boot AOSP.\nBug: 187958881\nChange-Id: Ife722082e87f85e907bfed3f5371865a5642157f\n"
    },
    {
      "commit": "81a6bd5a05ee3b2bb87ec4a0b471198dbbef3ce3",
      "tree": "e216bc4c698c259cfcfdac2d2f42ae3296955bfb",
      "parents": [
        "36138acc671d7781840bc209033994fd34fbd0e7"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun May 09 22:03:07 2021 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 12 18:06:20 2021 +0000"
      },
      "message": "Fix unwinding for art_quick_generic_jni_trampoline\n\nDELIVER_PENDING_EXCEPTION spills LR which is unused/garbage.\nThis breaks backtraces when the unwinder tries to follow it.\n\nAdd trivial call so that the LR is initialized.\n(spills at the start of method are expected and working)\n\nBug: 187632012\nTest: test.py -r --gcstress --all-run -t 1927 -t 178\nChange-Id: I151aa7595f9fd90169402187066a04efba5d54c9\n"
    },
    {
      "commit": "9a5a2b817c53fe86b0ebbc9390a97e7c5acbb44e",
      "tree": "7f2c1532f1ba6317bdad718eb833125eed677d32",
      "parents": [
        "9d00bf1e0a9441153e69ea26c4cf111690a6e6a8"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun May 09 21:37:02 2021 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon May 10 11:02:01 2021 +0000"
      },
      "message": "Fix debug symbol for art_quick_throw_null_pointer_exception_from_signal\n\nMake sure the end and start symbol names match.\n\nTest: Fixes broken backtraces during gcstress\nChange-Id: I1fa57a94fba4f74cd56975f0e2adcd4e72972e3d\n"
    },
    {
      "commit": "053e1383c721b0a1c4f87b2d391ab392c64caf84",
      "tree": "d6698eaf3f64440b47c06e5d6f670be06cfcc80e",
      "parents": [
        "bcec38f7b7dc92d89ce9d49b8c1ba9afe87dab6b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 05 16:07:27 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 10 08:12:24 2021 +0000"
      },
      "message": "Link libvixl statically.\n\nInstead of including shared library libvixl.so in the ART\nModule, link libvixl statically to all binaries that use it,\nnamely libart-compiler.so and libart-disassembler.so which\nshall increase in size with the additional libvixl code.\n\nThe ART Module size with default libvixl symbol visibility:\n  - before: 88460730B\n  - after: 86973943B (-1.42MiB)\nWith hidden libvixl symbol visibility:\n  - before: 88337851B\n  - after: 84962808B (-3.22MiB)\n(This is with master-art where we do not have a boot\nprofile and therefore compile more code in boot image.)\nThe change from default to hidden visibility is done in\n    https://android-review.googlesource.com/1697237 .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nBug: 186902856\nChange-Id: I040b0115b94b8690ee7be53e3ded8610d9f13e99\n"
    },
    {
      "commit": "bcec38f7b7dc92d89ce9d49b8c1ba9afe87dab6b",
      "tree": "672ac33f3e719b67f4eb29525c5620fdd186305d",
      "parents": [
        "c256028e1fb92b47c741db67b6bc8ca6995e6c1b"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri May 07 17:34:51 2021 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sun May 09 18:33:57 2021 +0000"
      },
      "message": "Do not sleep while waiting for GC\n\nThis is a partial revert of aosp/1690649. It backs out the\naddition of the wait loop in CheckGCForNative().\n\nWe can apparently still encounter cases in which we sleep for a\nnonexistent GC.\n\nTest: Build and boot AOSP\nBug: 187531176\nBug: 186592536\nChange-Id: Icaf75ae3582ea51eecf9fe4b81e629bc1d862788\n"
    },
    {
      "commit": "6958df93f8cb3d82bddadbabb5ed94b3b63a7f14",
      "tree": "6f2e721a55f717fe769392d4f814ea40b4c77e66",
      "parents": [
        "30cf977ce14391bde90aa25633bc852796101dee"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri May 07 17:40:34 2021 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat May 08 20:30:46 2021 +0000"
      },
      "message": "Use cached memory for gcstress unwinds.\n\nChris added faster memory recently which does page-based caching.\n\nChange-Id: I94f3baf48bef107a1994d03de47909e9a5433e83\n"
    },
    {
      "commit": "39d4df62d4e2606073d05cc363370db825ad7b9f",
      "tree": "8e4cf0ac432406081d11e9102981446498b3265b",
      "parents": [
        "a28c827fdb58ec489931d6e70e27818619bc1b75"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 07 12:22:47 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 07 14:41:25 2021 +0000"
      },
      "message": "Revert \"Devirtualize to HInvokeStaticOrDirect.\"\n\nThis reverts commit 5024ddfd125b5c3b59d7f359ae33cf7f0255b048.\n\nBug: 187408838\n\nReason for revert: b/187408838\n\nChange-Id: If74f5ddbacc73296f66c55762e2a8d1ec2cd1f19\n"
    },
    {
      "commit": "a28c827fdb58ec489931d6e70e27818619bc1b75",
      "tree": "038448d3d8d2922c05296b60b1280c3ed3f596b6",
      "parents": [
        "7eedd447cb5a4904acf80123ef813a7b8dead9a2"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 30 17:09:10 2021 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri May 07 09:13:03 2021 +0000"
      },
      "message": "Use `quick_exit` instead of `_exit` (except for error handling).\n\nReplace every occurrence of `_exit` (for cases other than pure error\nhandling) with `quick_exit`, in order to allow functions registered\nwith `at_quick_exit` to be called before exiting.\n\nIn particular, this change will allow LLVM\u0027s code coverage profile\ndumping routine to be called before exiting ART processes.\n\nTest: mmma art\nTest: ART tests\nBug: 186576313\nChange-Id: Ia9b0dbb471e2a26600c8bd23f7567931d050fc9d\n"
    },
    {
      "commit": "6e1b7d85d9b86971885d13a464482e9f42870709",
      "tree": "bd1eb101c3f2d97565c1e1085cc72020ffe4f654",
      "parents": [
        "0877daf3a4c81a3b7508851b751d3e4a4cd1d7aa"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu May 06 09:58:46 2021 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu May 06 20:31:01 2021 +0000"
      },
      "message": "Add heterogenous lookup to Thread::custom_tls_\n\nThis avoids needing to allocate strings when performing lookups.\n\nTest: ./test.py --host\nBug: 135266723\nChange-Id: I4eb4d890816ed25199077ab017723078a531e09e\n"
    },
    {
      "commit": "0877daf3a4c81a3b7508851b751d3e4a4cd1d7aa",
      "tree": "45e3289b790068dbfc8fe948355b53d5741ab604",
      "parents": [
        "7a147a05dcaadb69fb2619cc6161acbd0114cfed"
      ],
      "author": {
        "name": "Wessam Hassanein",
        "email": "wessam@google.com",
        "time": "Thu Apr 29 23:53:14 2021 -0700"
      },
      "committer": {
        "name": "Wessam Hassanein",
        "email": "wessam@google.com",
        "time": "Thu May 06 17:46:13 2021 +0000"
      },
      "message": "Avoid the warning heapprofd_client_api.so does not include an\ninitialization function.\nSince heapprofd_client_api.so is not an ART plugin change the code to\nremove that and cleanup.\n\nTest: Passing Tests\nLocal Testing\nBug: 183123789\n\nChange-Id: I60ae00d7628a4b54664dbd27b50624e358928095\n"
    },
    {
      "commit": "5024ddfd125b5c3b59d7f359ae33cf7f0255b048",
      "tree": "b625ed5aa1c4976e4cd2de5732543d5d1eb34a0f",
      "parents": [
        "5859b689d4fdd36711187715c04e2e095f7975c0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 28 14:42:09 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 06 10:37:17 2021 +0000"
      },
      "message": "Devirtualize to HInvokeStaticOrDirect.\n\nWhen we statically know the target method, devirtualize an\nHInvokeInterface or an HInvokeVirtual to a HInvokeStaticOrDirect.\n\nTest: test.py\nBug: 182538502\nChange-Id: Ie3a58603cde300fca9ca4972d4dfbbd20918f5ba\n"
    },
    {
      "commit": "5859b689d4fdd36711187715c04e2e095f7975c0",
      "tree": "84b374c23e07024935ee899b9a34916168d93228",
      "parents": [
        "68dc4a524c00958cf4f11fc687eabf4c677cde69"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 05 12:34:56 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 06 09:24:35 2021 +0000"
      },
      "message": "Clean up `ResetOffset()` calls in profile tests.\n\nMost are unnecessary since\n    https://android-review.googlesource.com/1685637\nand we remove a few more by using `PreadFully()` instead\nof `ReadFully()`.\n\nTest: m test-art-host-gtest\nBug: 148067697\nChange-Id: Ia654f4519ea9ca91f9a5ca26af55899ccdf4bb78\n"
    },
    {
      "commit": "107d22b9c7a97275e62bb5a97eb871713cfa0616",
      "tree": "356b800329a1c39a5e117bea3a0e1db7c94383e4",
      "parents": [
        "17c50188958aded77367ae9c9ad649a90ff26d6c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 04 10:57:36 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 05 10:44:32 2021 +0000"
      },
      "message": "Handle potential race in oat file loading.\n\nIt could be that the oat file we\u0027re trying to load non-executable is not\nthere anymore.\n\nTest: test.py\nBug: 177175508\nChange-Id: Ic7240d09604d1d967a575c72244f28f36c8ad3b5\n"
    },
    {
      "commit": "8078996ff904d3038f774c6c355796cfa42d67b2",
      "tree": "a8e5659963b3b558b46c19d9de9e9947b0cd48df",
      "parents": [
        "e059ef1ca72c1750f104194d6333931ee62120a9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 30 16:50:39 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 05 07:42:38 2021 +0000"
      },
      "message": "Handle a potential race when verifying dex files in the background.\n\nIn case the runtime has verified a class already, explicitly still\nperform another verification in order to get the verifier_deps\npopulated.\n\nTest: test.py\nChange-Id: I17dcec9545dab1b0cae170b584cd091f00145344\n"
    },
    {
      "commit": "d808f69a57bef8c2405da2fb07fc2f8dc9c09d10",
      "tree": "8fdbb9c49fa5c26c53e9a763b22e0733f0484d3c",
      "parents": [
        "807de1ed238c706ed781301cb6a764c7a2c348f4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat May 01 11:09:04 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 04 10:51:35 2021 +0000"
      },
      "message": "string_view: handle with care.\n\nDon\u0027t create temporary std::strings in InitializeApexVersions as we\u0027re\nusing string_view of these strings in maps.\n\nTest: test.py, asan build\nBug: 186883886\nChange-Id: I6129dee4a06db3cf2bd73157da5b40b67704cbfb\n"
    }
  ],
  "next": "5c4d0df0ee900a174b6c582cc1e918596f19db36"
}
