)]}'
{
  "log": [
    {
      "commit": "4f623272bdf76d0308af4e45a71fb5a728d4f0f1",
      "tree": "7403e7709f968dd6396fabe821c4eba88e5f87dd",
      "parents": [
        "1de4428db83a426fd7d0615dc9cdd204de41f6e3"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 07 16:32:26 2021 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jul 08 13:33:01 2021 +0000"
      },
      "message": "Fix another style issue reported by cpplint.\n\nTest: m cpplint-art-all\nChange-Id: I18cd3cbc47e8df4cfa319dde756edc1539cb8720\n"
    },
    {
      "commit": "b6e679292e526f48a2a7c389b37f920419243c27",
      "tree": "90e1a4cf98ea510571fe45c38493b81e77f7d056",
      "parents": [
        "7209da0a46dd96ae5b9d73124ef09b4b0fe9ac25"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 15:53:07 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 07 16:10:07 2021 +0000"
      },
      "message": "Move Transaction logs to arena allocator.\n\nAnd change some containers to reduce memory usage.\n\nAlso update `SafeMap` with some C++17 functions, namely all\n`erase()` and `extract()` overloads and `insert()` overloads\ntaking a \"node\". The `extract()` and `insert()` overloads\nare convenient to avoid allocation/dealocation when updating\nthe key of an entry.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I791d00598ac288b1f31c92daa63b5b3dcf6b41fa\n"
    },
    {
      "commit": "24c080f628e7df51460332374f4ebcae2762d155",
      "tree": "cbb0231518ce4afc94310b13edb1b87e5f14600b",
      "parents": [
        "4dc6589f392d46800a3b64625245bdfe4bbbfc2f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 14:04:30 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 07 08:01:57 2021 +0000"
      },
      "message": "Remove locking from `Transaction`.\n\nMulti-threaded execution of transaction has never been fully\nsupported, so remove the unnecessary locking as it is pure\noverhead. (And implementing it would require a lot of effort\non transactions interfering with each other.)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Ibdbc335738d34ea1398f50f0cc763f3b3f5838b9\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": "0685b981042acb57355e6742cf0ab18fbcfc4e25",
      "tree": "b9af226c72e2f173943c96c95a04349fe63134bb",
      "parents": [
        "579db19af4f718c1aac5ca95c180a70c5114c6bd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 25 11:59:22 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 30 14:39:19 2021 +0000"
      },
      "message": "Abort transaction when Class.forName() fails.\n\nAnd update VmClassLoader.findLoadedClass implementation in\nUnstartedRuntime which has erroneously diverged since\n    https://android-review.googlesource.com/145075 .\nAlso prevent transactional interpreter from transfering\ncontrol to a catch handler for aborted transactions.\n\nAlso clean up Transaction::kAbortExceptionDescriptor naming\nand some unused parameters.\n\nTest: TransactionTest.CatchClassForNameAbortClass\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: Ibfc544283f5434efbaab238d11a6152ed2578050\n"
    },
    {
      "commit": "b68bb7a02ea795fa4defb18b3f9ce31879d66271",
      "tree": "2aa9d13f36a5ae1625f520c397fae62fbcb155e6",
      "parents": [
        "dc9d6a0740982a6b1eab5f3c580d8825cc9ced9c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 17 10:55:25 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 18 09:59:29 2020 +0000"
      },
      "message": "Fix compiling boot image extension with assume-verified.\n\nThe change https://android-review.googlesource.com/1246288\nenabled AOT initialization of classes for the compiler\nfilter \"assume-verified\". However, this was untested and\nbroken because aborted transactions would leave created\narray classes with partially rolled-back state on the heap.\nNote that for other compiler filters, the verification step\ncreates those array classes outside of a transaction.\n\nWe fix this problem by making sure that the initialization\nof an array class does not create any transaction records\nfor the class fields (we are keeping the defined class).\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: adb root \u0026\u0026 \\\n      adb shell stop \u0026\u0026 \\\n      adb shell setprop dalvik.vm.boot-image \\\n          \u0027boot.art:/nonx/boot-framework.art!/system/etc/boot-image.prof\u0027 \u0026\u0026 \\\n      adb shell setprop dalvik.vm.image-dex2oat-filter \\\n          assume-verified \u0026\u0026 \\\n      adb shell start  # Starts correctly.\nTest: Extract the boot image extension compilation command\n      from the verbose log, change compiler filter to\n      \"assume-verified\" and execute with no crashes.\nBug: 119800099\nChange-Id: Id57a01af0a015c75a16eea12fd19599ae76ce49a\n"
    },
    {
      "commit": "4d7b689fe667a65138eceb311767a3d624fb0e4b",
      "tree": "b59be0fd4130f73142cdc0699b5d0bc0dc63798f",
      "parents": [
        "87712da946a5e10edb460ad1df03d8b26d6a0fdc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 16 17:06:35 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jan 20 15:26:38 2020 +0000"
      },
      "message": "Fix Transaction constraint validation...\n\n... for boot image extensions. Add WriteConstraint checks\nto APUT instructions and add necessary WriteConstraint and\nWriteValueConstraint checks to UnstartedRuntime.\n\nFor strict transactions (app compilation), prevent writing\nto boot image objects. However, more work is required for\nthis use case as the UnstartedRuntime needs a review for\nmissing ReadConstraint checks and the WriteValueConstraint\nmay need to be more restrictive.\n\nWhile the transaction_test is improved to test Transaction\nconstraints more thoroughly, no regression tests are\nprovided for the previously missing checks. Such tests are\ndifficult to write as they would require compilation of\na custom boot image.\n\nTest: Manual; include java.lang.Locale[] in primary boot\n      image by patching CompilerDriver::LoadImageClasses(),\n          +  if (GetCompilerOptions().IsBootImage()) {\n          +    image_classes-\u003einsert(\"[Ljava/util/Locale;\");\n          +  }\n      , and build. This previously aborted in ImageWriter:\n          Image object without assigned bin slot: \\\n          java.util.concurrent.ConcurrentHashMap$Node\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 119800099\nBug: 147596904\nChange-Id: Ibfe1b24b10dbd982b4e4ae4d98289e587a842812\n"
    },
    {
      "commit": "149cddaa22a1a78e8dde179d2c33b745cb500629",
      "tree": "af751d1b98fad44a2742089c6928677261f9f580",
      "parents": [
        "fdbe207596c11cf84c23855123d87ea6e15b70ff"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 12 15:02:51 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 13 11:52:43 2019 +0000"
      },
      "message": "Check stored references in transactional interpreter.\n\nFor boot image extension, we need to reject references to\nclasses that are defined in a dex file belonging to the boot\nimage we\u0027re compiling against but not actually in the boot\nimage. Allowing such references could yield duplicate class\nobjects from multiple extensions.\n\nTest: Additional tests in transaction_test.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --interp-ac\nChange-Id: I99eaec331f6d992dba60aeb98a88c268edac11ac\n"
    },
    {
      "commit": "672c08092a7d95bb504bceb712812f72524d90da",
      "tree": "e539c269d8733b13e43c41f9784d0c6c8200a9d6",
      "parents": [
        "e91d787c2de859789ec6e467bd04ee28b22a8c4e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 26 13:03:13 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 29 12:33:14 2019 +0000"
      },
      "message": "Update Transaction for boot image extension.\n\nAnd clean up transaction-related code to keep test code\nout of the production binaries.\n\nTest: Add TransactionTest#Constraints to transaction_test.\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: aosp_taimen-userdebug boots.\nChange-Id: Iefe5f1cfde95f564069249148f9e7d71564d7a10\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "67bf42e89592c3a1c648f927f2ce3ccb189a1161",
      "tree": "054d5b7adf7cc62d4d2a2118a70c0fbdd1751610",
      "parents": [
        "d961043ff1dd6fddb68aa90c1f939cfafec24219"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Feb 26 16:43:04 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 28 15:08:21 2018 -0800"
      },
      "message": "Header library to remove dependence on runtime/\n\nAdd a new header library to remove libdexfile and others\u0027 dependence on\nruntime (typically runtime/base) includes in libdexfile.  Also a small step\nto tease dexlayout and profman away from relying on these as well.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host-gtest\n\nChange-Id: I38e2fe399a75f4bc6318c77a71954c00ea73ec2b\n"
    },
    {
      "commit": "9e734c7ab4599d7747a05db0dc73c7b668cb6683",
      "tree": "dce1d1993734a947fb2e6f626eb1b425cb72143b",
      "parents": [
        "b496af808eaf3af5ebac50aef4fbec33323b5016"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 04 17:56:19 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 05 11:07:19 2018 -0800"
      },
      "message": "Create dex subdirectory\n\nMove all the DexFile related source to a common subdirectory dex/ of\nruntime.\n\nBug: 71361973\nTest: make -j 50 test-art-host\nChange-Id: I59e984ed660b93e0776556308be3d653722f5223\n"
    },
    {
      "commit": "bd208d8e73084b691d9cfbe870120fe53863ce07",
      "tree": "9b2b20a1aeae2cba97a394f7b106ba31dbaf565a",
      "parents": [
        "83ee165fd4fde2d7939449881159e2e4b5d3b79d"
      ],
      "author": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Wed Jul 12 14:53:17 2017 -0700"
      },
      "committer": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Sat Jul 29 17:15:24 2017 -0700"
      },
      "message": "Read and write constraints for clinit\n\nFor clinits executed during pre-compile within a transaction, they are\nconstrained to only be able to access their own static fields because\nthe results of iniitialization relying on static fields, either read or\nwrite, of other classes are runtiime determined.\n\nFurther discussion can be found at b/62887449.\n\nWhen SGET and SPUT series instructions are executed, interpreter will\ncheck whether fields are static and does the target match with the\ntransaction owner, if not, abort transaction and throw an exception.\n\nTest: make test-art-host -j64\nBug: 62887449\nChange-Id: I3e655269c8af5f0b3f2c1841fdd2602c827c2757\n"
    },
    {
      "commit": "605fe24d07062a038c8332a4d98f47052e9cee6a",
      "tree": "9c6b132e5ec615d3f0f3aa4ab6f24486fb31d2bb",
      "parents": [
        "5a906fcc111ffc07d9fd1e7265e8b4a89609f00e"
      ],
      "author": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Thu Jul 20 15:57:21 2017 -0700"
      },
      "committer": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Wed Jul 26 16:26:23 2017 -0700"
      },
      "message": "Implemented Nested Transaction\n\nTransaction can be created recursively and every transaction knows which\nclass it is created for.\n\nThe goal of implementing nested transaction is to let every class\ninitialization (especially execution of class initializer) associates\nwith one transaction which provides the ability to track whether field\naccesses are valid. To achieve this goal, we implemented a subclass for\nClassLinker called AotClassLinker, which will be instantiated instead of\nClassLinker under AOT compiler.\n\nAll invocations of InitializeClass happens at AOT compiler will be\nwrapped with creating and destorying transactions.\n\nTransactions will be paused when rollbacking, otherwise the memory will\nnot be rollbacked properly.\n\nThe use the transaction is changed and all usage are updated,\ncorresponding with native tests mentioning transaction, including\ntransaction_test and unstarted_runtime_test.\n\nThe validation rules will be implemented and explained in another CL.\n\nTest: make test-art-host -j64\n\nChange-Id: If53d3ee3231c337a9ea917f5b885c173917765de\n"
    },
    {
      "commit": "5a906fcc111ffc07d9fd1e7265e8b4a89609f00e",
      "tree": "2bc863d6a51f5e67562653686b138ae1d3757caf",
      "parents": [
        "055761a47c4c0f591faaf44279e8d6a412c4f513"
      ],
      "author": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Wed Jul 26 15:01:16 2017 -0700"
      },
      "committer": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Wed Jul 26 15:05:24 2017 -0700"
      },
      "message": "Add strict flag in transaction\n\nAdd a flag named strict_ indicating whether we are compiling app images,\nwhich need more strict constraints to control \u003cclinit\u003es\u0027 behavours.\n\nWhen the transaction is marked as strict mode, behaviour changes\nincluding nested transactions, field access validation, memory\nconsumption limit and time out for \u003cclinit\u003e at compile time.\n\nTest: make test-art-host -j64\n\nChange-Id: I7cc0eea161803ad0d7763725d4deaeee21858054\n"
    },
    {
      "commit": "cade5c3c75588da6d873df727acdaf3378a66efa",
      "tree": "126fc494a05e39d0b2566a608f15e140e5eb915f",
      "parents": [
        "16d1dd86dca33520b44d9802695e19d3b658af3e"
      ],
      "author": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Thu Jul 20 17:56:26 2017 -0700"
      },
      "committer": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Sat Jul 22 16:33:20 2017 -0700"
      },
      "message": "Track class initializing in transaction\n\nAdd a field and a corresponding constructor to transaction which keeps\ntrack of the class that the transaction is initializing.\n\nTo implement constraints for \u003cclinit\u003e behaviors, the transaction needs\nto know which class it is initializing.\n\nTest: make test-art-host -j64\nChange-Id: I87b3fcb3ef15914c79c6687ec8a87058265eaead\n"
    },
    {
      "commit": "57cf00bde719ddc84a6015b107b90a20169e3099",
      "tree": "1522952470490e6b107d07649f511ef09f9abd32",
      "parents": [
        "40c6710dfa0d10d34dcca8ed92c214faba36c833"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 17:15:32 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 18:29:04 2017 -0700"
      },
      "message": "ART: Remove old object_callbacks.h includes\n\nRemove unused includes.\n\nTest: m\nChange-Id: I70c227d32c6900904e186b975d1f2131b718d93d\n"
    },
    {
      "commit": "deae7db5864fa50c5a1cd6c232a17aeb986b36e1",
      "tree": "cdedad3d0f921e4f82fa7b65d55820455b7ac0ea",
      "parents": [
        "8d01c3708c4becb186979ed9377aed0fc2954d06"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 30 09:56:41 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 30 14:15:50 2017 -0700"
      },
      "message": "ART: Add missing namespace comments\n\nAdd closing namespace comments.\n\nBug: 32619234\nTest: m\nChange-Id: I1f50e09dcd1038c4b540b87e5c19e319c1f592e4\n"
    },
    {
      "commit": "d9911eeca13f609c885e0f6a5ce81af9b6340bfa",
      "tree": "f850510643ee120dba140bf0bb3e1c1b9c9ce4db",
      "parents": [
        "46bfb7c047a590ac5c24b658f31c170631556bb6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 27 13:27:24 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 27 13:53:48 2017 -0700"
      },
      "message": "ART: Clean up field initialization\n\nAdd explicit field initialization to default value where necessary.\nAlso clean up interpreter intrinsics header.\n\nTest: m\nChange-Id: I7a850ac30dcccfb523a5569fb8400b9ac892c8e5\n"
    },
    {
      "commit": "38e954c4fb68955db391411467f9cf51c250966c",
      "tree": "4f3d3ed3810d5cf5a86aa3a81ce43692f4ed2f69",
      "parents": [
        "9779c896a2e9e6e59e2f3702bf6e26b7fc9e7944"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Feb 03 16:06:35 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Feb 03 16:15:38 2017 -0800"
      },
      "message": "Clean up transaction\n\nDisallow copy constructors, use move constructors, and fix\nformatting. Aims to prevent future bugs.\n\nTest: test-art-host\n\nBug: 34963782\n\nChange-Id: Iaf626e94b14a1fd1b6b64fbd434f5de678e53dc2\n"
    },
    {
      "commit": "8a0128a5ca0784f6d2b4ca27907e8967a74bc4c5",
      "tree": "0dec75200282ae5e49785395e97bd4e6459f1c09",
      "parents": [
        "60438b46090d22bb9b978196f5aa53fab3b89759"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 28 07:38:35 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 29 11:11:46 2016 -0800"
      },
      "message": "ART: Add dex::StringIndex\n\nAdd abstraction for uint32_t string index.\n\nTest: m test-art-host\nChange-Id: I917c2881702fe3df112c713f06980f2278ced7ed\n"
    },
    {
      "commit": "9e868098b4a5d666570e3924518978d7abd3542e",
      "tree": "f4e4ee5bb96e3ba00838fd0bfff96eabe636abcb",
      "parents": [
        "b0b2080b4cea8365052d1be973e927f8ee85f609"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 31 14:58:04 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 31 16:40:39 2016 -0700"
      },
      "message": "Move intern table to ObjPtr\n\nAlso moved StringLog to use a GcRoot.\n\nAlso removed read barriers from lookup to prevent making weak strings\nstrongly live more often than necessary.\n\nBug: 31113334\n\nTest: clean-oat-host \u0026\u0026 test-art-host CC baker\n\nChange-Id: I05586e125d5dfed8d184890468fd398c79f32619\n"
    },
    {
      "commit": "bb816d66aabb9c2a2e095517d2013041116332db",
      "tree": "1d51444ec1d6febfba8c2d6e9502bf76939261fa",
      "parents": [
        "ddac139d83bfb121d1536fb40ab48c9bee6c25b1"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Sep 07 10:17:46 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 08 11:17:17 2016 -0700"
      },
      "message": "Add transactions for string resolve\n\nFixes a bug where resolved strings can be left in the dex cache after\na transaction is rolled back even though the interned string was\nremoved.\n\nAdded test in transaction_test.\n\nBug: 31239436\n\nTest: test-art-host\n\nChange-Id: I42c67bcefeae8db134cde34c480261f52db4102e\n"
    },
    {
      "commit": "bdf7f1c3ab65ccb70f62db5ab31dba060632d458",
      "tree": "25cc77adfeb05232d0ab00aa561a693f1d71745c",
      "parents": [
        "d7eabc2cc1a88c1f7f927da61246ae65aab0626c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 16:38:47 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 17:02:53 2016 -0700"
      },
      "message": "ART: SHARED_REQUIRES to REQUIRES_SHARED\n\nThis coincides with the actual attribute name and upstream usage.\nPreparation for deferring to libbase.\n\nTest: m\nTest: m test-art-host\nChange-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518\n"
    },
    {
      "commit": "90443477f9a0061581c420775ce3b7eeae7468bc",
      "tree": "8c74b81dfae162e0fd0ccf8d5ac50827ba815174",
      "parents": [
        "6078aec213dfaf111c29969706e8e5967cfc9bea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 16 20:32:27 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 15:13:56 2015 -0700"
      },
      "message": "Move to newer clang annotations\n\nAlso enable -Wthread-safety-negative.\n\nChanges:\nSwitch to capabilities and negative capabilities.\n\nFuture work:\nUse capabilities to implement uninterruptible annotations to work\nwith AssertNoThreadSuspension.\n\nBug: 20072211\n\nChange-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33\n"
    },
    {
      "commit": "b81e1cddd6a8ccccb9fe86e3bfae12b2657b8085",
      "tree": "d247ef138c2304c2ac7c5a0147ad06200e58de07",
      "parents": [
        "b6829c2ee05124d64a19c7a52ada4a23f624fb91"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 28 12:31:41 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 29 15:50:03 2015 +0200"
      },
      "message": "Fix missing transaction abort error message\n\nChange-Id: I5157def06d385c082f9fdd4714e20bead9e707e8\n"
    },
    {
      "commit": "bb87e0f1a52de656bc77cb01cb887e51a0e5198b",
      "tree": "113f014c6e20fab3e936a3ac05f9f738639541f6",
      "parents": [
        "e57fc0f0260fcb1d08cbb720ec95c04c0f394b91"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 03 11:21:55 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 06 10:44:37 2015 -0700"
      },
      "message": "Refactor and improve GC root handling\n\nChanged GcRoot to use compressed references. Changed root visiting to\nuse virtual functions instead of function pointers. Changed root visting\ninterface to be an array of roots instead of a single root at a time.\nAdded buffered root marking helper to avoid dispatch overhead.\n\nRoot marking seems a bit faster on EvaluateAndApplyChanges due to batch\nmarking. Pause times unaffected.\n\nMips64 is untested but might work, maybe.\n\nBefore:\nMarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us\n\nAfter:\nMarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us\n\nBug: 19264997\n\nChange-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca\n"
    },
    {
      "commit": "2fd7e69505195cda4caaa3161aaf37315552a698",
      "tree": "2bd681443ad36a8616f237a12e56ecbdb7054f8e",
      "parents": [
        "c6e949a6d93fae2351fc59ed825657adee8185dc"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Apr 02 11:11:19 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 03 09:31:59 2015 +0200"
      },
      "message": "Use specific exception class to abort transaction\n\nWe used to throw a java.lang.InternalError when aborting a\ntransaction (when preinitializing image classes at compilation time).\n\nWe now use dedicated class dalvik.system.TransactionAbortError that\nis only thrown by the compiler to abort a transaction. This class has\nconstructors taking a java.lang.Throwable \"cause\" so we can wrap\nexceptions causing the transaction to abort (for instance class\njava.lang.ClassNotFoundException) and give more information about the\ncause of the transaction abort.\n\nBug: 20019689\nChange-Id: I019a72a1c754d8bba6a7ad6bb0f02e4fd6668622\n"
    },
    {
      "commit": "bd9cf9f6bbf285ec7a5b74ce655a9e68e0f6e434",
      "tree": "04f3b49c2946c99b0aac23552f8c3cfdf8da39f4",
      "parents": [
        "ff9b747588e77f04b07dc76b2d39a82cbfc60441"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Mar 03 12:16:13 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Mar 03 14:30:46 2015 +0100"
      },
      "message": "Follow-up 128393\n\nAvoids false warning when initializing the exception\u0027s class by\nmarking the transaction aborted after throwing the InternalError\nexception.\n\nAlso uses VLOG(compiler) to print the warning since it\u0027s only useful\nwhen investigating ahead-of-time class initialization.\n\nBug: 19202032\nChange-Id: I3c53639cbb888086ad345d668d1e5b73c5aaf861\n"
    },
    {
      "commit": "1c80becf5406cd6d95dc24bf47a0c5a3809ea281",
      "tree": "24853b3512e21b18df7a2401b174df891684334e",
      "parents": [
        "e5deafe9cdd81238c3916b04301ea884c93f46b5"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Feb 03 11:58:06 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Feb 05 09:05:41 2015 +0100"
      },
      "message": "Fix transaction aborting\n\nDuring compilation, a java.lang.InternalError is used to indicate\nthat class initialization failed and the enclosing transaction\nshould be aborted and the changes rolled back. However there is\nnothing preventing the code executed from a class initializer from\ncatching that exception (like catching Throwable and ignore it).\nTherefore we may return from the class initializer with no pending\nexception, even if the transaction was aborted, and not rollback\nthe changes properly.\n\nTo fix this, we now rely on the new Transaction::aborted_ field to\nknow whether a transaction aborted. When returning from the class\ninitializer without pending exception, we now check wether we aborted\nthe enclosing transaction. If that\u0027s the case, we set the status of\nthe class to kStatusError and throw a new java.lang.InternalError\nwith the original abort message.\n\nThis CL also contains some cleanup:\n- Renames Transaction::Abort to Transaction::Rollback which is less\nambiguous and more reflect what is done.\n- Moves the code throwing the java.lang.InternalError exception into\nthe Transaction::ThrowInternalError method so we do not duplicate\ncode. Now we may abort transaction more than once (because we may\nhave caught the java.lang.InternalError then execute code causing\nnew transaction abort), we only keep the first abort message to\nthrow the exception.\n- Updates transaction_test with more cases and more checks.\n- Bumps oat version to force recompilation with this fix.\n\nBug: 19202032\nChange-Id: Iedc6969528a68bbdf3123146e990df4dbc57834b\n"
    },
    {
      "commit": "e34fa1df67fbe0173b4ea9abddcc3ae3d0537037",
      "tree": "a5148f079b5671a95f60910c41981ebf91db3a02",
      "parents": [
        "9f06b1946ae3ef1d2fd75bbf7f0a288bc611fe58"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 14 14:55:47 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 15 12:23:28 2015 -0800"
      },
      "message": "Print more info in MarkSweep::VerifyRoot\n\nRefactored old root callback to use a new class called RootInfo.\nRootInfo contains all the relevant info related to the root\nassociated with the callback. The MarkSweep::VerifyRoot function\nnow uses this info to print the StackVisitor\u0027s described location\nif the GC root is of the type kRootJavaFrame.\n\nSome other cleanup.\n\nExample output:\nE/art     (12167): Tried to mark 0x123 not contained by any spaces\nE/art     (12167): Attempting see if it\u0027s a bad root\nE/art     (12167): Found invalid root: 0x123 with type RootJavaFrame\nE/art     (12167): Location\u003dVisiting method\n\u0027void java.lang.Runtime.gc()\u0027 at dex PC 0xffffffff (native PC 0x0)\nvreg\u003d0\n\n(cherry picked from commit 12f7423a2bb4bfab76700d84eb6d4338d211983a)\n\nBug: 18588862\nChange-Id: Ic5a2781f704e931265ffb3621c2eab4b2e25f60f\n"
    },
    {
      "commit": "6a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866f",
      "tree": "9df58b57af13240a93a6da4eefcf03f70cce9ad9",
      "parents": [
        "c6e0955737e15f7c0c3575d4e13789b3411f4993"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 31 00:33:20 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 03 20:01:04 2014 -0800"
      },
      "message": "Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.\n\nFix associated errors about unused paramenters and implict sign conversions.\nFor sign conversion this was largely in the area of enums, so add ostream\noperators for the effected enums and fix tools/generate-operator-out.py.\nTidy arena allocation code and arena allocated data types, rather than fixing\nnew and delete operators.\nRemove dead code.\n\nChange-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b\n"
    },
    {
      "commit": "cdfd39f579574a75b98e7ad48c69826b00361b27",
      "tree": "0f057472d19bf290766e20ea3ad63d0b28ee83a1",
      "parents": [
        "9a4f02722051955e536d6aacb776d637a6713545"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 29 18:16:58 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 02 14:39:49 2014 -0700"
      },
      "message": "Change intern table to unordered set.\n\nIntern table active used bytes goes from 430k to 317k on system\nserver. Similar %wise savings on other apps.\n\nBug: 16238192\n\n(cherry picked from commit d910fcef539e12ab181e56ec80684f39c4e95733)\n\nChange-Id: Ic70395124435c6f420a77e6d8639404a160f395a\n"
    },
    {
      "commit": "37f05ef45e0393de812d51261dc293240c17294d",
      "tree": "7c7793862efa52e1deb42babbdcb652c245ab941",
      "parents": [
        "e25826e28ea65d9c1aa23f84788a091c677b20c7"
      ],
      "author": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Wed Jul 16 18:38:08 2014 -0700"
      },
      "committer": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Mon Aug 25 11:16:53 2014 -0700"
      },
      "message": "Reduced memory usage of primitive fields smaller than 4-bytes\n\nReduced memory used by byte and boolean fields from 4 bytes down to a\nsingle byte and shorts and chars down to two bytes. Fields are now\narranged as Reference followed by decreasing component sizes, with\nfields shuffled forward as needed.\n\nBug: 8135266\nChange-Id: I65eaf31ed27e5bd5ba0c7d4606454b720b074752\n"
    },
    {
      "commit": "1bd4872773184fb9f5f152c7bbf9856a8235d2af",
      "tree": "f00044ea6edf93e130dd89a30f88fb6c7c60b0ce",
      "parents": [
        "0130ba045e1397594f2c6a0dd48730349fe3cbed"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri May 23 19:58:15 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed May 28 11:46:57 2014 -0700"
      },
      "message": "Add read barriers to the weak roots in the intern table.\n\nBug: 12687968\nChange-Id: I424f1df76a7e3d7154fb9f3c951c973d19bd640f\n"
    },
    {
      "commit": "ee1d79a603c77c0667b27c075a983579d5c51f7e",
      "tree": "7b23516402105319ab4736cd179a1de9101eeb46",
      "parents": [
        "78bd9b2198f0ccc48036c1517b2d9a9023157dfb"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Feb 21 15:46:30 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 02 09:21:12 2014 +0200"
      },
      "message": "Cleanup transaction support\n\nUpdates Thread::CreateInternalStackTrace to support both transactional and\nnon-transactional modes using template.\n\nGeneralizes non-transactional mode for invariant fields (which are set only\nonce).\n\nRemoves ArrayLog::VisitRoots as we never create Array logs of ObjectArray. As\nObjectArray elements are set using Object::SetFieldObject, they are already\nrecorded in the object logs: the object is the array itself and the offset\ncorresponds to the element index in this array. And also checks we never log\nObjectArray in array logs.\n\nFixes location of thrown exception when calling native method during class\ninitialization.\n\nChange-Id: Idbc368d3b8292b85ff40bc8a7c559e085477bf89\n"
    },
    {
      "commit": "719d1a33f6569864f529e5a3fff59e7bca97aad0",
      "tree": "fcd84efd7b9806b93ec1a44e2317e6f882e7fe0e",
      "parents": [
        "5365eea9940269b662cfbe103caa348816ff1558"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 06 12:13:39 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 06 19:16:01 2014 -0800"
      },
      "message": "Enable annotalysis on clang ART builds.\n\nFix clang build errors aswell as restructure locking/mutex code for correct\nthread safety analysis support.\nReorder make dependencies so that host builds build first as they should\nprovide better compilation errors than target.\nRemove host\u0027s use of -fno-omit-frame-pointer as it has no value with correct\nuse of CFI, which we should have.\n\nChange-Id: I72cea8da9a3757b1a0b3acb4081feccb7c6cef90\n"
    },
    {
      "commit": "d2fe10a3a34af171bf1631219cd2d6ff6b7778b5",
      "tree": "b6b7eb8eba23a5c2723518da99c03bf47b97f58a",
      "parents": [
        "5a3f55ad9519e87c0d3bbddaf3d8a186a887a79b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jan 15 10:20:56 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Feb 17 11:32:15 2014 +0100"
      },
      "message": "Remove blacklist\n\nRemoves the class initialization blacklist and use transaction to detect and\nrevert class initialization attempting to invoke native method. This only\nconcerns class initialization happening at compilation time when generating an\nimage (like boot.art for the system).\n\nIn transactional mode, we log every object\u0027s field assignment and array update.\nTherefore we\u0027re able to abort a transaction to restore values of fields and\narray as they were before the transaction starts. We also log changes to the\nintern string table so we can restore its state prior to transaction start.\n\nSince transactional mode only happens at compilation time, we don\u0027t need to log\nall these changes at runtime. In order to reduce the overhead of testing if\ntransactional mode is on/off, we templatize interfaces of mirror::Object and\nmirror::Array, respectively responsible for setting a field and setting an\narray element.\n\nFor various reasons, we skip some specific fields from transaction:\n- Object\u0027s class and array\u0027s length must remain unchanged so garbage collector\ncan compute object\u0027s size.\n- Immutable fields only set during class loading: list of fields, method,\ndex caches, vtables, ... as all classes have been loaded and verified before a\ntransaction occurs.\n- Object\u0027s monitor for performance reason.\n\nBefore generating the image, we browse the heap to collect objects that need to\nbe written into it. Since the heap may still holds references to unreachable\nobjects due to aborted transactions, we trigger one collection at the end of\nthe class preinitialization phase.\n\nSince the transaction is held by the runtime and all compilation threads share\nthe same runtime, we need to ensure only one compilation thread has exclusive\naccess to the runtime. To workaround this issue, we force class initialization\nphase to run with only one thread. Note this is only done when generating image\nso application compilation is not impacted. This issue will be addressed in a\nseparate CL.\n\nBug: 9676614\nChange-Id: I221910a9183a5ba6c2b99a277f5a5a68bc69b5f9\n"
    }
  ]
}
