)]}'
{
  "log": [
    {
      "commit": "a190ecb6f16b025a9c0c82f4c15ef5f759cd7e97",
      "tree": "32d2998080df8cdedc1360a950fb7fde94bc51ff",
      "parents": [
        "097b607ac6855b6c81ef4495c3738ba5e2f2c9db"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Oct 21 23:01:56 2024 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Oct 21 23:18:50 2024 +0000"
      },
      "message": "RefBase: document leak memory case\n\nWe should fix the leak, but it introduces the possibility\nthat something is use this. Instead, document best practice\n(not to allocate RefBase objects on the stack).\n\nFixes: 295340906\nTest: N/A\nChange-Id: Ife7a561f790dc687fb99b73729818e61834fa272\n"
    },
    {
      "commit": "e0ec952bae15d296006de86b80782551c144afa4",
      "tree": "f82b34c0dc8ee4ec79f70d83dffc45bb4ab79e94",
      "parents": [
        "7cc50a8c2959d31817e06974ae8d6563160ef338"
      ],
      "author": {
        "name": "Shai Barack",
        "email": "shayba@google.com",
        "time": "Mon Oct 07 15:25:28 2024 +0000"
      },
      "committer": {
        "name": "Shai Barack",
        "email": "shayba@google.com",
        "time": "Tue Oct 08 08:36:03 2024 +0000"
      },
      "message": "Avoid unnecessary allocation in VectorImpl\n\nWhen shrinking a vector, we might reallocate the buffer\nif the current capacity is too large, or we might reuse\nthe existing buffer.\nNever reallocate the buffer if the current capacity is\nalready at the minimum (i.e. we won\u0027t actually shrink by\nreallocating).\n\nBug: 370649413\nChange-Id: I665037ed2a8621a82f2b58bcc834934de0761f34\nFlag: EXEMPT bugfix\nTested: see b/370649413#comment6\n"
    },
    {
      "commit": "1ec5290872b1bd120e44ebffddd47b2a62bc90d1",
      "tree": "dd92764c2331f048cffa40906474358c2b3edf05",
      "parents": [
        "65daca3b88d5c21ffbbe446ee067edfc010ba614"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Sep 26 12:59:37 2024 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Sep 26 12:59:37 2024 -0700"
      },
      "message": "Remove unnecessary getpriority() system call\n\nThis was introduced for a valid reason in aosp/1224543, but that reason\nwas later removed. This code wasn\u0027t.\n\nIt is not worth making a system call in order to possibly avoid a second\none, which I expect is no more expensive in that, particularly easy,\ncase.\n\nTest: Treehugger\nChange-Id: I346f9b641c6feb791247b16fb900a4ad97e646d2\n"
    },
    {
      "commit": "7d9c9af9467da2848923a8e45a84b00ca4625a25",
      "tree": "9f0e8152cd4a6bd96c75ffad6c543c92c69d2b23",
      "parents": [
        "511a1733ece9ae19b5b5a3d0477151fa6447bdb8"
      ],
      "author": {
        "name": "Paul Ramirez",
        "email": "peramirez@google.com",
        "time": "Mon Sep 16 20:44:57 2024 +0000"
      },
      "committer": {
        "name": "Paul Ramirez",
        "email": "peramirez@google.com",
        "time": "Tue Sep 17 17:40:11 2024 +0000"
      },
      "message": "Add getFdStateDebug to access Looper\u0027s callbacks\n\nAdded getFdStateDebug to access Looper\u0027s internal state.\n\nFlag: EXEMPT testing\nTest: TEST\u003dlibutils_test; m $TEST \u0026\u0026 $ANDROID_HOST_OUT/nativetest64/$TEST/$TEST --gtest_filter\u003d\"LooperTest.getFdStateDebug*\"\nChange-Id: I253ed4a6fa1040053117dcea3be80e55eef9a9b0\n"
    },
    {
      "commit": "be2cc9f93077ad024aa2aee31dd9ad5fa5873ecc",
      "tree": "14b5c10a7b5912491b77d57cd6ebc3c84448a41f",
      "parents": [
        "f62078fa17f09f2ec705a9b437417b7444bdda1c"
      ],
      "author": {
        "name": "Aditya Kumar",
        "email": "appujee@google.com",
        "time": "Thu Sep 05 14:03:59 2024 -0700"
      },
      "committer": {
        "name": "Aditya Kumar",
        "email": "appujee@google.com",
        "time": "Fri Sep 06 15:33:08 2024 -0700"
      },
      "message": "Fix type of android_thread_func typedef\n\nFound the error with latest clang: https://android-build.corp.google.com/artifact/pending/P80448506/art-host-x86_64/latest/view/logs%2Fbuild_error.log\n\n```\nout/soong/.intermediates/system/core/libutils/libutils/linux_glibc_x86_64_static/obj/system/core/libutils/Threads.o system/core/libutils/Threads.cpp\nsystem/core/libutils/Threads.cpp:149:21: error: cast from \u0027android_thread_func_t\u0027 (aka \u0027int (*)(void *)\u0027) to \u0027android_pthread_entry\u0027 (aka \u0027void *(*)(void *)\u0027) converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]\n  149 |                     (android_pthread_entry)entryFunction, userData);\n      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n1 error generated.\n```\n\nChange-Id: Ie2423a568483c975a36a1fa0b06a3f93a27be5aa\n"
    },
    {
      "commit": "b654f2c287fd6504da2b46317c919b100842a96c",
      "tree": "15bdabcd7864180d47130317e255cd5dec2c2e43",
      "parents": [
        "2ed904d8ea374a9d70733fbaa40811c0c96e6f6f"
      ],
      "author": {
        "name": "Jerome Gaillard",
        "email": "jgaillard@google.com",
        "time": "Wed Jul 31 15:52:09 2024 +0000"
      },
      "committer": {
        "name": "Jerome Gaillard",
        "email": "jgaillard@google.com",
        "time": "Wed Jul 31 15:52:09 2024 +0000"
      },
      "message": "Remove Windows-specific code from Trace.h\n\nlibcutils builds for Windows, so there is no need to handle Windows\ndifferently in Trace.h.\n    \nBug: 322360037\nTest: build libutils for Windows\n\nChange-Id: If17de95a2222c7d17c74988695d68754f06957ea\n"
    },
    {
      "commit": "ab772110c74ec77e59c593fe7e3b3836fbdd164d",
      "tree": "3eb00dd3b50eff4092a52451dd2e2e859ed03add",
      "parents": [
        "9418c6712c65c7fdc49b425ded8675f0abd40825"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 01 13:21:36 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 01 13:21:36 2024 +0000"
      },
      "message": "Insulate against log spam.\n\nWe may as well check the entire log. The previous bump seems to have made this test less flaky, so why not go all the way?\n\nChange-Id: I26b7524731ec755b724b9363fc9151f6a6d9116d\n"
    },
    {
      "commit": "d41c0f4a9e6e8178f5b8f46fe3b9a4530efc113a",
      "tree": "8c3e35a701af81036f9882fdee3f13caed4b0d7f",
      "parents": [
        "2d4d60cccb705f0ce86da6075aa3606857fa9737"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Jun 25 10:34:23 2024 -0700"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Jun 28 12:46:11 2024 -0700"
      },
      "message": "Migrate pthread to std::thread\n\nBug: 341997808\nTest: atest --host libutils_test\nChange-Id: I4f435d5d85efcbcc351b7620811c172badc2276d\n"
    },
    {
      "commit": "47fde793b111aecdb34edba598b5697ba9c4701c",
      "tree": "d077d19f6d53b0c2ad5dfea6264ec81928ac0556",
      "parents": [
        "b2bd7ae863131f0853c135022cc8b9139eea9172"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Jun 26 17:50:14 2024 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Jun 26 17:52:47 2024 +0000"
      },
      "message": "libutils: CallStackTest log_stack check more log\n\nCheck last 10,000 instead of last 1,000 log entries.\n\nFixes: 348793356\nTest: presubmit\n\nChange-Id: I08c660ddd7e49466a4b55d96e46a402ee8912a24\n"
    },
    {
      "commit": "6f13d115eb0191e240364b70e59186777c8683fd",
      "tree": "605921c4783bf634e413ab8afd3969e7d1969bc2",
      "parents": [
        "1fd7993f85bdf304bc53ca562b8c79a2142daa08"
      ],
      "author": {
        "name": "T.J. Mercier",
        "email": "tjmercier@google.com",
        "time": "Fri Jun 21 21:27:32 2024 +0000"
      },
      "committer": {
        "name": "T.J. Mercier",
        "email": "tjmercier@google.com",
        "time": "Mon Jun 24 20:18:55 2024 +0000"
      },
      "message": "libutils: Remove unused dependency on libprocessgroup_headers\n\nBug: 349105928\nTest: m\nChange-Id: Ic3e64b073c0ba087c3db19fb428c8c9132c8211f\n"
    },
    {
      "commit": "8bc0ee30bf815380cb9163b8c73641b79ca9d3c5",
      "tree": "74490a6c6d73b1d64699cf9a84acc4e57a2f6f6a",
      "parents": [
        "4c5b2303b9f01cdb2724c99550a492865bb3531b",
        "c4db546a218dc3fa88d86fc03d3139549b293908"
      ],
      "author": {
        "name": "Spandan Das",
        "email": "spandandas@google.com",
        "time": "Tue Jun 11 23:08:56 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 11 23:08:56 2024 +0000"
      },
      "message": "Merge \"Add libz to static libs of libutils_test\" into main"
    },
    {
      "commit": "50095020dbd95b94e21ac87afb6b9c977d718882",
      "tree": "2645193a37d7238763359109948363fa2daab5be",
      "parents": [
        "e028a195d0ca82215b2971d52d4093a676d45395",
        "0a2a015e39db778eca620e970472728b4897d41b"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue May 28 20:13:03 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 28 20:13:03 2024 +0000"
      },
      "message": "Merge \"Fix libutils_binder_sdk build warnings\" into main"
    },
    {
      "commit": "e028a195d0ca82215b2971d52d4093a676d45395",
      "tree": "b14fd9fffa78dc31f189fbf9de0d856da4c534a3",
      "parents": [
        "82bc07f911466acf7177d866b3f8c514778c04dd",
        "7badb51d228c760bb9203f34f2e577c93e9078d2"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue May 28 20:11:34 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 28 20:11:34 2024 +0000"
      },
      "message": "Merge \"Mark libutils_binder_sdk as snapshot supported\" into main"
    },
    {
      "commit": "0a2a015e39db778eca620e970472728b4897d41b",
      "tree": "ca75611b60eafb87459d586f915d567ce3fead98",
      "parents": [
        "7badb51d228c760bb9203f34f2e577c93e9078d2"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Apr 30 10:47:35 2024 -0700"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue May 28 09:51:20 2024 -0700"
      },
      "message": "Fix libutils_binder_sdk build warnings\n\n-Wclass-memaccess\n-Winvalid-offsetof\n-Wsequence-point\n-Wzero-as-null-pointer-constant (turned on in ag/4503295)\n\nBug: 285204695\nTest: m libutils_binder_sdk\nChange-Id: I5b988f498cb8e0cf04617a4f7fd41ba9970d321d\n"
    },
    {
      "commit": "7badb51d228c760bb9203f34f2e577c93e9078d2",
      "tree": "49b79d36fe69ecc49b5e4db082ac1a8372be3b49",
      "parents": [
        "cc6eaae72517c3d3e555fe313983fae3675908ed"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Wed May 08 16:21:18 2024 -0700"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue May 28 09:49:49 2024 -0700"
      },
      "message": "Mark libutils_binder_sdk as snapshot supported\n\nBug: 302718225\nTest: https://r.android.com/2803466\nChange-Id: I3a26e1c4c63e0ed6de896ef31eb56f3a3a6bba01\n"
    },
    {
      "commit": "110308e5ab096a720c44b9d01d0ffe2535bb4b28",
      "tree": "1d2b2dcb60d737bf8a0ed2bed2bae9a3bc6b4e3d",
      "parents": [
        "ba1e0bdd6ce524a2c89e7b53bfb1f873afd59b9f",
        "ad8cf52c4c2b60250d52f1b0b90648fdf407dff4"
      ],
      "author": {
        "name": "Kiyoung Kim",
        "email": "kiyoungkim@google.com",
        "time": "Thu May 23 00:38:19 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 23 00:38:19 2024 +0000"
      },
      "message": "Merge \"Remove VNDK definition(s)\" into main"
    },
    {
      "commit": "f01048743ab300595c265a74ec31858f0cc59267",
      "tree": "9809452fcd748112c8df9783a6d6df7a558a4de6",
      "parents": [
        "53748d08e595066fc138b97051032799d7af7124"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri May 10 01:37:09 2024 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed May 15 17:34:57 2024 -0700"
      },
      "message": "Define String8 and String16 operator\u003c\u003d\u003e\n\nPreviously, in C++20 mode, using \u003c\u003d\u003e on String8 or String16 would\ncompare the pointer values from the implicit conversion operators\nreturning const char* and const char16_t*. Instead, compare the string\ncontent. This is especially a problem with STL containers that prefer\n\u003c\u003d\u003e when it is available.\n\nSee https://godbolt.org/z/cc1hW17h3 for a demo of the problem.\n\nBug: 339775405\nTest: treehugger\nChange-Id: I5ee6af96dee0c9968a1bab1ad96729e45bb1ac50\n"
    },
    {
      "commit": "cd3ffd1f2cb91303c6a8caed1429d1fd210de2d7",
      "tree": "271bb4eb0b26a2f0bbf52ca61bd70fdc03f8b03c",
      "parents": [
        "6f7e39526c956e679ea37758ee6efc9ece2edb6a",
        "38d36e44927d56f45042fb5e11a342a3a7dd5daa"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Apr 26 23:06:22 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 26 23:06:22 2024 +0000"
      },
      "message": "Merge \"libutils: T* is a trivial type\" into main"
    },
    {
      "commit": "38d36e44927d56f45042fb5e11a342a3a7dd5daa",
      "tree": "e0b724b4e54aee315c1393fc079f4f95176b98b2",
      "parents": [
        "6d6ff398b337561eb44b944f5b5c08ff388517af"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Apr 26 21:08:48 2024 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Apr 26 21:08:48 2024 +0000"
      },
      "message": "libutils: T* is a trivial type\n\nAvoid calling constructors/destructors for\neach element, when we have Vector\u003cT*\u003e. These\nare used in libbinder and elsewhere.\n\nstd::vector is still faster but uses more mem.\n\nBugs: me\nTest: boot \u0026\u0026 binderLibTest\nChange-Id: Id1239daddd018f8eee5480d1cb6dd25d6f4df808\n"
    },
    {
      "commit": "541f850372064958bb956c5290216e5931fb5912",
      "tree": "d43b089420fac4ce227ab370214f4fe46339581b",
      "parents": [
        "793679f47a23c2f8c8e7354d2bb728a9a673b590"
      ],
      "author": {
        "name": "Akshata Kadam",
        "email": "akshata.jadhav@ittiam.com",
        "time": "Thu Apr 11 14:26:17 2024 +0530"
      },
      "committer": {
        "name": "Akshata Kadam",
        "email": "akshata.jadhav@ittiam.com",
        "time": "Thu Apr 11 14:31:25 2024 +0530"
      },
      "message": "Updated fuzz_config in Android.bp file\n\nAdded new fields in fuzz_config like - componentid,\ndescription, vector, service_privilege, users, fuzzed_code_usage, etc.\n\nBug: 306435930\nTest: Build libutils_fuzz_callstack\n\nChange-Id: I826d75ab01eb0a4d2b363681d4f5a3a4578bbc99\n"
    },
    {
      "commit": "bcaeacc6862be57f72ba1c51427214136c2e06df",
      "tree": "bc0109c23b6a451b978680361c68d912602c6fc1",
      "parents": [
        "bc3476d5dc6fed6fe8401144df5486fa7174ecd2"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 27 16:17:50 2024 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 27 17:49:51 2024 -0700"
      },
      "message": "Enable weak functions properly.\n\nThere is a check for WEAKS_AVAILABLE that is never set. Change this so\nso it is available everywhere except apple/windows.\n\nAdd new test to verify that on Android the logStackInternal function is\ndefined.\n\nBug: 331489939\n\nTest: All unit tests pass.\nChange-Id: Ie982eba30ae421931a62718d39ff1f0c282453db\n"
    },
    {
      "commit": "ad8cf52c4c2b60250d52f1b0b90648fdf407dff4",
      "tree": "d0c9557f0c68831d2a8c8546a0c87b3888ddf12f",
      "parents": [
        "b2bfb972e8c612356abe319c9b6109dccc2e03ed"
      ],
      "author": {
        "name": "Kiyoung Kim",
        "email": "kiyoungkim@google.com",
        "time": "Mon Mar 11 13:04:38 2024 +0900"
      },
      "committer": {
        "name": "Kiyoung Kim",
        "email": "kiyoungkim@google.com",
        "time": "Fri Mar 15 08:19:44 2024 +0000"
      },
      "message": "Remove VNDK definition(s)\n\nAs of VNDK deprecation, any libraries that defines vndk is no longer\nvalid anymore. This change removes all VNDK definition(s) from modules\nwhich was VNDK. Any former VNDK-SP libraries will be marked as double-loadable,\nso it can keep be able to be referenced by LLNDK libraries.\n\nBug: 328994089\nTest: AOSP CF build succeeded\nChange-Id: I1662f16e5e446bb28167b0bb278cd63997267d2a\n"
    },
    {
      "commit": "fdc642643d25a4d67e5a04ae8ad4b0528a8c3835",
      "tree": "ab367cde5d80b48f775c02019aec85d1a40f9858",
      "parents": [
        "df09f80cf43981ef0d96826ee5b879864029184c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 23 00:46:16 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 23 00:46:16 2024 +0000"
      },
      "message": "Reduce \u003cCallStack.h\u003e namespace pollution.\n\nUse the CALLSTACK_ prefix uniformly, and undefine all the macros\nat the end of the file.\n\nChange-Id: Ie5f92bb8cb8b3753082b1c1145696a1e0409e04d\n"
    },
    {
      "commit": "071880f5cbc2a051f99cd61226f4b63ebcb6997d",
      "tree": "5f93cbe98ed9fa332263355ee61a4a6c9a959050",
      "parents": [
        "7cf49320ba53f2954a00409c264ccdca2a7b728b"
      ],
      "author": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 21 17:56:48 2024 -0800"
      },
      "committer": {
        "name": "Andy Hung",
        "email": "hunga@google.com",
        "time": "Wed Feb 21 21:34:22 2024 -0800"
      },
      "message": "RefBase: update sp and wp to allow constinit\n\nA constexpr ctor is useful for static initialization.\nWe also modernize the unit test for static variable best practices.\n\nTest: atest libutils_binder_test\nChange-Id: If42c0939fb1a2dcb8eb101ed0e10051f67e2150d\n"
    },
    {
      "commit": "593b19b5ce1831ef1dbec6a556e62e903394a1db",
      "tree": "f0607b36efc79dcc90473a8f81653f02cfa5b22c",
      "parents": [
        "66dc1bde80367080cdef37ded67ffa303807e4ae"
      ],
      "author": {
        "name": "Serdar Kocdemir",
        "email": "kocdemir@google.com",
        "time": "Wed Feb 14 13:53:13 2024 +0000"
      },
      "committer": {
        "name": "Serdar Kocdemir",
        "email": "kocdemir@google.com",
        "time": "Wed Feb 14 17:52:19 2024 +0000"
      },
      "message": "Check if ALWAYS_INLINE is already defined\n\nFixes build errors when using callstack library in gfxstream\nproject, where the definition is already made.\n\nTest: build\nChange-Id: I80d4038160725b5dc70f9af93d338aca66a2f0d5\n"
    },
    {
      "commit": "29cd07132da2f5182a0d8ee1327c7175efbf019d",
      "tree": "19864ce7e1af94d7e295f4642b4b949abd66d9ad",
      "parents": [
        "c72c9a6d3c460d10fd5f9dfcd537daab261df168"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 09 16:40:02 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 09 16:40:02 2024 +0000"
      },
      "message": "Remove obsolete __STDC_LIMIT_MACROS references.\n\nNone of our libcs need this any more.\n\nTest: treehugger\nChange-Id: I8a942ad6b3860633a6d722bd237a7c75482499eb\n"
    },
    {
      "commit": "6225d6f3eb5204d39d88c093778b41ca326e81d3",
      "tree": "38caef5d62a74152ceaa25cdffca5288e624c1af",
      "parents": [
        "277533b7a3260c7076ea17aa7c2e57c432787a9c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 07 18:27:47 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 07 18:27:47 2024 +0000"
      },
      "message": "We don\u0027t need __STDC_FORMAT_MACROS any more.\n\nTest: treehugger\nChange-Id: Iada8b959f61bfa55b61d2ed4b345801ed9cea0c6\n"
    },
    {
      "commit": "34a09861af5f2fc81aed1be36ac187926f540718",
      "tree": "d5e2b3fb3aa66aded24844e65ae8467919ff9754",
      "parents": [
        "d95213e7a165780f6fd78551ad82db67ccb6047f"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Jan 20 00:20:17 2024 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jan 23 21:51:13 2024 +0000"
      },
      "message": "libutils: Looper add \u0027repoll\u0027\n\nTo help cases where kernel drivers do not\nimplement poll events correctly.\n\nBug: 316829336\nTest: boot\n\nChange-Id: Ibad16a8e8e061a5be8cede7e8680c3095d6e6f32\n"
    },
    {
      "commit": "c4db546a218dc3fa88d86fc03d3139549b293908",
      "tree": "d90b4279616ba724be106520c401baa2f4b79fa5",
      "parents": [
        "9c88c9d351ac49ab26d91f74b86fdada4e2595ec"
      ],
      "author": {
        "name": "Spandan Das",
        "email": "spandandas@google.com",
        "time": "Sat Jan 20 20:12:03 2024 +0000"
      },
      "committer": {
        "name": "Spandan Das",
        "email": "spandandas@google.com",
        "time": "Sat Jan 20 20:12:03 2024 +0000"
      },
      "message": "Add libz to static libs of libutils_test\n\nlibz is no longer statically linked into libunwindstatck, so needs to be\nadded explicitly to the static libs of this test\n\nBug: 281077552\nTest: presubmits\nChange-Id: Ia04b63cb8dfd5e80536a188a35d036dd3e4fd775\n"
    },
    {
      "commit": "e5b667bd38ba90ff080a685c52b15371eea8a19a",
      "tree": "fedb043a1cb232d4ce870feebb5308fdc333e0ff",
      "parents": [
        "94d60a73f40fcdc1df12592a186f55b7382b9524"
      ],
      "author": {
        "name": "Hsin-Yi Chen",
        "email": "hsinyichen@google.com",
        "time": "Mon Jan 08 18:49:37 2024 +0800"
      },
      "committer": {
        "name": "Hsin-Yi Chen",
        "email": "hsinyichen@google.com",
        "time": "Mon Jan 08 18:52:13 2024 +0800"
      },
      "message": "Enable header_abi_checker for libutils explicitly\n\nThe ABI checking rules for VNDK will be deleted from the main branch.\nTo keep monitoring the ABI, the check must be enabled explicitly.\n\nTest: m libutils.vendor\nBug: 314010764\nChange-Id: I762dec1ed7de014db653663d2917a19df5076fc8\n"
    },
    {
      "commit": "1578cb3c142bbe41bec709dbb352fd88e8a085ba",
      "tree": "b9898fca3cbcfc7de6b85314f8360c16d2f9bd8f",
      "parents": [
        "1b44b8c6d62ce59cab9ddce9e44300b41c51b0e7"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Nov 21 08:56:06 2023 -0800"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Dec 07 14:04:16 2023 -0800"
      },
      "message": "Introduce libutils_binder_sdk\n\nBug: 285204695\nTest: mma in Binder directory\nChange-Id: I430b81594167940cb47897e4261ad87c75ac3783\n"
    },
    {
      "commit": "862f049d178e6158e62fb80ec3cacccf0fe3966b",
      "tree": "afa83654132cb04a0884576a368b2394c6bf0262",
      "parents": [
        "bc907c00f4bbb88997778eedfcf2d03a1849b794"
      ],
      "author": {
        "name": "Kai Sky",
        "email": "dqksky@gmail.com",
        "time": "Fri Nov 24 14:20:20 2023 +0000"
      },
      "committer": {
        "name": "Kai Sky",
        "email": "dqksky@gmail.com",
        "time": "Wed Nov 29 05:41:01 2023 +0000"
      },
      "message": "Looper: Fixed compile error when enabling DEBUG_CALLBACKS\n\nWhen enabling DEBUG_CALLBACKS , compiler complains\nfor the undeclared identifier \u0027fd\u0027.\nFix by removing undeclared objects.\n\nChange-Id: I751a9ef9d8843350105acd6a30645f897050ffa4\n"
    },
    {
      "commit": "e01550bbb6520f00c0826e17e13360f127dfddf6",
      "tree": "c5b467360a83047144cd1d4b9300a542749fc049",
      "parents": [
        "ced62e53eda45387d06c55c155c6bbef8a80a8a0"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Nov 10 15:05:35 2023 -0500"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Nov 20 11:55:02 2023 -0500"
      },
      "message": "Add StrongPointer::release()\n\nUseful when dealing with raw pointers in unavoidable places. Avoids\nan awkward (and \"slow\") dance of mySp-\u003eincStrong(0); mySp-\u003eget(); ~mySp;\n\nTest: make \u0026\u0026 atest --host libutils_binder_test\nChange-Id: Ib8d46150592725cc256779bccfed19a16dce78b2\n"
    },
    {
      "commit": "b6f459abbc594e3b5821bd500a3dca33fe6af84c",
      "tree": "0d4fe292743db88672399e1dab118c804895f90a",
      "parents": [
        "8fbaaa33a1b8c388be4fdefe98741372e4879c24"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Oct 26 15:55:08 2023 -0700"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Oct 27 10:48:43 2023 -0700"
      },
      "message": "Allow disabling callstack\n\nBug: 302723053\nTest: mma\nChange-Id: Idea326cc9914d4c81d75dad287e169c09a736486\n"
    },
    {
      "commit": "c7383702733f5a9f954a3f151ee9a555ff0576ff",
      "tree": "8f7022b7b4adeaad46955444e23d12fda647f162",
      "parents": [
        "2ae67e71199fe74258bd12a5330e3e9c7d149b36"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 21 00:43:52 2023 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Oct 24 23:45:01 2023 +0000"
      },
      "message": "libutils_binder: isolate headers\n\nThis isolated all libutils_binder headers from libutils\nexcept for RefBase use of CallStack.h. This header can\nbe disabled with a macro option easily.\n\nBug: N/A\nTest: N/A\nChange-Id: I83af091fc17b5418ab9e4d7fc41fb43792ec547d\n"
    },
    {
      "commit": "7a1ca59839f3ebb8fd73037c7380af958e03ef07",
      "tree": "48a753342498f96bcc72bef942068d16912aa43d",
      "parents": [
        "0666c3a632e811fc1f49685ddfff21ce6b3efa34"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 07 01:09:39 2023 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Oct 09 21:56:15 2023 +0000"
      },
      "message": "libutils: split out libutils_binder\n\nDependencies of libbinder, so we can build\na core libbinder library, libbinder_sdk.\n\nThis is preparing the way to move this part of libbinder\ntogether with binder code into a single project.\n\nBug: 302720583\nChange-Id: Icff078ac6e36c7f2b91cf815d5b9ed19b2e706e1\n"
    },
    {
      "commit": "0666c3a632e811fc1f49685ddfff21ce6b3efa34",
      "tree": "ed96f3356e7f20266909b6e116a2d6b32ddfc09f",
      "parents": [
        "066e625b6b74028f10848ce73a758bd8ea83f378"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 07 00:35:38 2023 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 07 00:35:38 2023 +0000"
      },
      "message": "libutils: remove unused \u0027CALLSTACKS\u0027\n\nThis macro is set, but it doesn\u0027t exist.\n\nBug: 302720583\nTest: build\nChange-Id: I88032c24b8bc8dc52d521e769149cbd8f619dde8\n"
    },
    {
      "commit": "066e625b6b74028f10848ce73a758bd8ea83f378",
      "tree": "3a00beaaec19b3ae0147b6f603a8d5e46b385930",
      "parents": [
        "b0bff22429ba480bf00774cc12f73be56cc966b3"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 07 00:29:44 2023 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 07 00:29:44 2023 +0000"
      },
      "message": "libutils: use log/log.h internally\n\nutils/Log.h is one less file we need if we\u0027re\nsplitting up this library for binder.\n\nBug: 302720583\nTest: build\nChange-Id: Ibc7ec5402df342627f465354d7cf59e98f450a31\n"
    },
    {
      "commit": "8c9c7d076f6d945de6ec41b30bd5ef55a88db8b9",
      "tree": "235102f36e0c7e928c3840122f2e8e83b0cc2d3c",
      "parents": [
        "ac758f2ccc908df4366f602e31afd75c25cba4a5",
        "010c37b6154d6a1d04125b3f140592c83ec70df7"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Wed Sep 27 15:06:23 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 27 15:06:23 2023 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Lock down String8|16.string() usage\"\"\" into main"
    },
    {
      "commit": "532a608f588588c03218aaffe1f5fc0429a02537",
      "tree": "5c06b36d4ed65ef803747f310a98e4e1bed56ad6",
      "parents": [
        "59a2cde894d2f0638057379435a420defb56df6a",
        "87c90e7b65c734ba553a4655d0aee8c7dd939676"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Sep 22 19:42:45 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 22 19:42:45 2023 +0000"
      },
      "message": "Merge changes I7790dde8,I065907a5,Id2e82024 into main\n\n* changes:\n  Add missing \u003cassert.h\u003e include\n  Add missing \u003cfunctional\u003e and \u003cvector\u003e includes\n  snapuserd_test: don\u0027t discard result of std::async\n"
    },
    {
      "commit": "999efbef093214bf8302591a17a777439a0a85e6",
      "tree": "6616b875be6adf37b6b92b597cc6093e796d1eb2",
      "parents": [
        "93377e99e2ffa260f1da5b53326d51ef19ab74f6"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Sep 21 17:51:52 2023 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Sep 21 17:52:29 2023 -0700"
      },
      "message": "Add missing \u003cfunctional\u003e and \u003cvector\u003e includes\n\nBug: 175635923\nTest: m MODULES-IN-system-core-libutils\nChange-Id: I065907a58a88723ae512f155dfde2d2fcb3fc322\n"
    },
    {
      "commit": "2b1a0599c4530c34b57ba109917904451b55214e",
      "tree": "1467c5c4f43c6a013498516d999cf4847b98c66b",
      "parents": [
        "d741c23288096e47928e64a2a27ed764487fe694"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Sep 12 15:26:15 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Wed Sep 20 15:11:54 2023 +0000"
      },
      "message": "Don\u0027t depend on String8 cast to C string\n\nBug: 295394788\nTest: m checkbuild\nChange-Id: I5b86ae56250d409a23ab3f2bc72b725bcf6ab23e\n"
    },
    {
      "commit": "010c37b6154d6a1d04125b3f140592c83ec70df7",
      "tree": "24d90532ec88dd67101f9bd856562b6296981b23",
      "parents": [
        "7210b285c2a7c8220789e039c9b2a72a931224cc"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 15 22:21:53 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 15 22:22:14 2023 +0000"
      },
      "message": "Revert \"Revert \"Lock down String8|16.string() usage\"\"\n\nThis reverts commit 7210b285c2a7c8220789e039c9b2a72a931224cc.\n\nReason for revert: attempt re-submit\n\nChange-Id: Ia95d11628c512163ae3d13cbdd5ebbe60f435937\n"
    },
    {
      "commit": "7210b285c2a7c8220789e039c9b2a72a931224cc",
      "tree": "1c44bd3cbf22bc567850b1e87063b5ad5c77e023",
      "parents": [
        "8b95a1248945b8ed565d44dda2500fc5a1a0f6fb"
      ],
      "author": {
        "name": "Devika Krishnadas",
        "email": "kdevika@google.com",
        "time": "Fri Sep 15 18:46:03 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 15 18:46:03 2023 +0000"
      },
      "message": "Revert \"Lock down String8|16.string() usage\"\n\nThis reverts commit 8b95a1248945b8ed565d44dda2500fc5a1a0f6fb.\n\nReason for revert: DroidMonitor: Test failure\n\nChange-Id: I09230ea7c3b80e1b4d277d3c6c6355a38f7bbc92\n"
    },
    {
      "commit": "8b95a1248945b8ed565d44dda2500fc5a1a0f6fb",
      "tree": "1c39efdd9ffd4bd297d5ff1c23c864501f3b6ae7",
      "parents": [
        "358a982b7169104736a8025fa1799327fa124f4f"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Aug 11 18:43:23 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Sep 14 18:37:52 2023 +0000"
      },
      "message": "Lock down String8|16.string() usage\n\nAll users should migrate to .c_str()\n\nBug: 295394788\nTest: make checkbuild\nChange-Id: Ic6295848cf3377e0bf5334448d5ed7ea53fae7ae\n"
    },
    {
      "commit": "358a982b7169104736a8025fa1799327fa124f4f",
      "tree": "1c44bd3cbf22bc567850b1e87063b5ad5c77e023",
      "parents": [
        "7f13bc4f473daadc335ed3fcff486cc690486623",
        "8b5c8477f915e8680257657042e64181104b9bda"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Sep 14 16:18:49 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 14 16:18:49 2023 +0000"
      },
      "message": "Merge \"Lock down String8.isEmpty() usage\" into main"
    },
    {
      "commit": "8b5c8477f915e8680257657042e64181104b9bda",
      "tree": "4ddc84114c0651e5419e2da72036f9f7acb64ad4",
      "parents": [
        "51e3b9cbca982d4917954e04755252b98937523b"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Mon Aug 14 18:20:02 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Sep 14 15:04:00 2023 +0000"
      },
      "message": "Lock down String8.isEmpty() usage\n\nAll users should migrate to .empty()\n\nBug: 295394788\nTest: make checkbuild\nChange-Id: I5ec7921b9cf70e6b0857e1087f141dce958d2587\n"
    },
    {
      "commit": "771bda6c0b991542359e8348a762878c60fccbc3",
      "tree": "985af9f73a5344228ac40a29b16bc68ede203b9b",
      "parents": [
        "8245afd47d9b355cce2034a5b6de957dcdafbb3e",
        "86c9ea8f861ec80399305f6f5aff422e45e0ac70"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Sep 12 20:43:20 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 12 20:43:20 2023 +0000"
      },
      "message": "Merge \"Implement android::String access methods that avoid C string cast\" into main"
    },
    {
      "commit": "86c9ea8f861ec80399305f6f5aff422e45e0ac70",
      "tree": "28ac269401a1b976bb2274b4e1289a14c0c22f8d",
      "parents": [
        "51e3b9cbca982d4917954e04755252b98937523b"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Sep 12 16:23:13 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Sep 12 17:25:29 2023 +0000"
      },
      "message": "Implement android::String access methods that avoid C string cast\n\nBug: 295394788\nTest: m checkbuild\nChange-Id: If25fd69319171e8c549fc8fcfd95a0819291d8e6\n"
    },
    {
      "commit": "8245afd47d9b355cce2034a5b6de957dcdafbb3e",
      "tree": "07996ac18920365999447b87370c6b8ab1f8f2b2",
      "parents": [
        "1b547892f62a84f3e3bfad56ac7865002db56a08",
        "a1853516ff0dc78b677eeafa792cdfa9e5d9a2ee"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Sep 12 14:02:13 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 12 14:02:13 2023 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Revert \"Revert \"Drop all path-related methods from android::String8\"\"\"\"\" into main"
    },
    {
      "commit": "a1853516ff0dc78b677eeafa792cdfa9e5d9a2ee",
      "tree": "4f2cb7f0c4ebb3c2859c9e207a0c7d5c56f0a79c",
      "parents": [
        "141255f30c35372bba80bfff9ac164f34e38784b"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Mon Sep 11 17:45:16 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 11 17:45:16 2023 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Drop all path-related methods from android::String8\"\"\"\"\n\nThis reverts commit 141255f30c35372bba80bfff9ac164f34e38784b.\n\nReason for revert: Attempt re-submit again\n\nChange-Id: I0e568fdf8f7a141ee3c5d54f68530ff478a47439\n"
    },
    {
      "commit": "d395f638facc1084d31619a7865feb6675d9dd5c",
      "tree": "d27ac8dc61ec84c33062bebdbf5dc8e47d2c60ee",
      "parents": [
        "6b78aac2cf1b7ee21ee25e8cd7427dd3ccb6f503",
        "141255f30c35372bba80bfff9ac164f34e38784b"
      ],
      "author": {
        "name": "Rhed Jao",
        "email": "rhedjao@google.com",
        "time": "Mon Sep 11 03:43:31 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 11 03:43:31 2023 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Revert \"Drop all path-related methods from android::String8\"\"\"\" into main"
    },
    {
      "commit": "141255f30c35372bba80bfff9ac164f34e38784b",
      "tree": "56a797967f446fa576412a988e16ad196f166149",
      "parents": [
        "4b6a7c3940bc6d5e89e15179d8d49600e6dd4857"
      ],
      "author": {
        "name": "Rhed Jao",
        "email": "rhedjao@google.com",
        "time": "Mon Sep 11 02:05:58 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 11 02:05:58 2023 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Drop all path-related methods from android::String8\"\"\"\n\nThis reverts commit 4b6a7c3940bc6d5e89e15179d8d49600e6dd4857.\n\nReason for revert: b/299695302, b/299694769\n\nChange-Id: I89c6719d23446f2f9ce24e5b75d321538b580431\n"
    },
    {
      "commit": "b2b037d9f05eaef2c09fdd8ec905d75dc7ac2644",
      "tree": "77f9394715d6db9d327e8b1bd22ec82db5f939b3",
      "parents": [
        "9cbae9d75bcb531a12d0a5b23088f396091690cd",
        "4b6a7c3940bc6d5e89e15179d8d49600e6dd4857"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 08 19:59:48 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 08 19:59:48 2023 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Drop all path-related methods from android::String8\"\"\" into main"
    },
    {
      "commit": "9cbae9d75bcb531a12d0a5b23088f396091690cd",
      "tree": "b4415901401e5e4f524eadbbf4d4af624882fbb6",
      "parents": [
        "acc7ff19f995a41e3033d841c2f0051b2fd25269",
        "adaf33026a32e336dd727cb4d03e9cd656c2869c"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 08 18:17:25 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 08 18:17:25 2023 +0000"
      },
      "message": "Merge \"Drop String8::std_string\" into main"
    },
    {
      "commit": "4b6a7c3940bc6d5e89e15179d8d49600e6dd4857",
      "tree": "4f2cb7f0c4ebb3c2859c9e207a0c7d5c56f0a79c",
      "parents": [
        "acc7ff19f995a41e3033d841c2f0051b2fd25269"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 08 17:11:39 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 08 11:03:59 2023 -0700"
      },
      "message": "Revert \"Revert \"Drop all path-related methods from android::String8\"\"\n\nThis reverts commit cff2e40d19113fa7ed57fedae072ad605cef1be7.\n\nReason for revert: Attempt re-submit\n\nChange-Id: I8802b519e4ae3046858b854815ba580c7a6b965d\n"
    },
    {
      "commit": "cff2e40d19113fa7ed57fedae072ad605cef1be7",
      "tree": "87e277e6e9161309c318dd4f35d555fc800c45b0",
      "parents": [
        "b9dc1c2991de9ca87bdbf00c413b7f2bb4477fe2"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 08 17:08:39 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 08 17:08:39 2023 +0000"
      },
      "message": "Revert \"Drop all path-related methods from android::String8\"\n\nThis reverts commit b9dc1c2991de9ca87bdbf00c413b7f2bb4477fe2.\n\nReason for revert: http://b/299624573\n\nChange-Id: I0d5993295df65ec31c180b6b5a76fbe939891f45\n"
    },
    {
      "commit": "adaf33026a32e336dd727cb4d03e9cd656c2869c",
      "tree": "252c0662fc055cd161c7cb8f43be23070684d838",
      "parents": [
        "cc64ed986547fccac4a15e6bd38d99d357e426a6"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 08 09:51:24 2023 -0700"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 08 09:51:24 2023 -0700"
      },
      "message": "Drop String8::std_string\n\nThis method was preserved under assumption it would be baked into many\nprebuilts, but since it\u0027s inline, there should be no linkage to libutils\n- thus, should be safe to remove anyway.\n\nBug: 35363681\nBug: 295394788\nTest: treehugger\nChange-Id: I59964935600e9e786424136177bfc8a70bebec67\n"
    },
    {
      "commit": "b9dc1c2991de9ca87bdbf00c413b7f2bb4477fe2",
      "tree": "86cbcf3728bfe7451ad67791ebfaccad4d46cc07",
      "parents": [
        "66b68dde923892be447e48355095dbf74be8ea70"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Aug 22 20:45:21 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Sep 08 03:07:52 2023 +0000"
      },
      "message": "Drop all path-related methods from android::String8\n\nMove them to androidfw and aapt, the last users.\n\nBug: 295394788\nTest: m checkbuild\nChange-Id: I7268b88d11bf221f93efed06cfd1ee65449a2421\n"
    },
    {
      "commit": "e474f21a45b5e2b8973ffd378b119bf378cd0282",
      "tree": "460c3f3f62749f343567671c51d6b3f6f2057aa6",
      "parents": [
        "18560efc308f9c345915dd4d5fa1a2939fcf5ebc"
      ],
      "author": {
        "name": "Hsin-Yi Chen",
        "email": "hsinyichen@google.com",
        "time": "Mon Sep 04 11:16:34 2023 +0800"
      },
      "committer": {
        "name": "Hsin-Yi Chen",
        "email": "hsinyichen@google.com",
        "time": "Mon Sep 04 03:38:15 2023 +0000"
      },
      "message": "Check the ABI of libutils for vendor and product only\n\nIt is not necessary to compare the dumps with the library installed in\nsystem partition.\n\nTest: m out/target/product/generic_x86_64/lsdump_paths.txt\nBug: 280008249\nChange-Id: I8fc39ad17d37cd43bf1d77ba23dde55d05dadce1\n"
    },
    {
      "commit": "18560efc308f9c345915dd4d5fa1a2939fcf5ebc",
      "tree": "e842372699fbba5e42708fc18de4cc775377e5d0",
      "parents": [
        "c718295a583df34c2b02ca948db95151c62e62b5",
        "f59712928233f6abadd888e7d014b6fa4a20e932"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Fri Aug 25 17:07:42 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 25 17:07:42 2023 +0000"
      },
      "message": "Merge \"Migrate from android::String isEmpty to empty\" into main"
    },
    {
      "commit": "9578c774a94f7e3d2744a5c1475687dab4ffcf21",
      "tree": "49c60c510c86f444f9f8d38e6c767157a205443e",
      "parents": [
        "92ad0d32c0e7a00e7ca3df656869e6d221802553",
        "2676893dd89fd7127c34a2f211dd02b5a8d7a647"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Aug 24 18:31:56 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 24 18:31:56 2023 +0000"
      },
      "message": "Merge \"Implement String8|16::empty and String16::length\" into main"
    },
    {
      "commit": "92ad0d32c0e7a00e7ca3df656869e6d221802553",
      "tree": "7083abab2e578e2808f1410bc88b0cf1ac7ef503",
      "parents": [
        "c728c39121a66e033a0e48e805b0b2587aba59ff",
        "1d98fe0d393f05283f3a10a896f1054ecd3043cd"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Aug 24 16:46:49 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 24 16:46:49 2023 +0000"
      },
      "message": "Merge \"Lose convertToResPath to aapt.\" into main"
    },
    {
      "commit": "1d98fe0d393f05283f3a10a896f1054ecd3043cd",
      "tree": "1fd5d7bad03dfdbd029bdf3e527ae547d207324a",
      "parents": [
        "d4e75d578b35d21d7703fb0c84254c202f8bb779"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 13 17:14:20 2021 -0700"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Aug 24 04:33:05 2023 +0000"
      },
      "message": "Lose convertToResPath to aapt.\n\naapt (not aapt2) is the only user.\n\nTest: treehugger\nChange-Id: Ie69f84f4f805c69f838e345b44755a316b9f9b06\n"
    },
    {
      "commit": "f59712928233f6abadd888e7d014b6fa4a20e932",
      "tree": "a486ec1ad74ced78c8169673e8a5466fa62fb2d6",
      "parents": [
        "2676893dd89fd7127c34a2f211dd02b5a8d7a647"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Mon Aug 14 18:18:26 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Aug 18 22:07:28 2023 +0000"
      },
      "message": "Migrate from android::String isEmpty to empty\n\nThis empty method is different from the old one - it aligns with\nstd::string definition.\n\nBug: 295394788\nTest: make checkbuild\nChange-Id: Id6baed8cde01a75a8839ad6b4475a31ba1f49c8a\n"
    },
    {
      "commit": "2676893dd89fd7127c34a2f211dd02b5a8d7a647",
      "tree": "a0758a2328c99ca43ba59f1b9c4feffbdc416335",
      "parents": [
        "6d1b644930d2c89ce967bcecc7fa4af0290e8fcd"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Mon Aug 14 17:05:51 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Aug 18 22:07:28 2023 +0000"
      },
      "message": "Implement String8|16::empty and String16::length\n\nThis time following std::string::empty meaning.\n\nString16::length is for parity with String8::length and to\nfollow std::string::length/size duo.\n\nBug: 295394788\nTest: mma\nChange-Id: I43df2cbb9ca6f980a4cf6d971064d594d661f884\n"
    },
    {
      "commit": "6d1b644930d2c89ce967bcecc7fa4af0290e8fcd",
      "tree": "9ed327947c7b1157f76aecef73953cf82745f189",
      "parents": [
        "d1e04d2123694480426703ed97399c0102109fd4"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Mon Aug 14 15:47:29 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Aug 18 22:07:28 2023 +0000"
      },
      "message": "Drop String::empty()\n\nThis method causes confuction and bugs by having the same name, but\ndifferent meaning versus std::string::empty().\n\nBug: 295394788\nTest: make checkbuild\nChange-Id: I15aadc023b20559930e4ec79f43f7032e8cd90d0\n"
    },
    {
      "commit": "18b746188c73a83ad57b99558914ba9421e8a20a",
      "tree": "489b856138f1b2d309d9208031f9177594a0a418",
      "parents": [
        "90af4157c57de30ea0c3ab5ce2ab79c2ba36ef3b"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Thu Aug 10 23:29:50 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Aug 11 19:53:20 2023 +0000"
      },
      "message": "Migrate String8/16 from .string() to c_str()\n\nThis will align usage with std::string.\n\nBug: 295394788\nTest: make checkbuild\nChange-Id: Ic5c215b011197950dcbcb0339f44cc68fefc65a1\n"
    },
    {
      "commit": "90af4157c57de30ea0c3ab5ce2ab79c2ba36ef3b",
      "tree": "c7bae00384c16d2223d73155d77d2b9692dabbfc",
      "parents": [
        "0c0dafae8d411b804564a19af628bb6ddebb56e8"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Aug 11 02:12:16 2023 +0000"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Fri Aug 11 19:40:34 2023 +0000"
      },
      "message": "Add String16::c_str and start using it.\n\nThis is for parity with String8::c_str and in general the first step\nin transition from String8|16.string() - to make it more similar to\nstd::string.\n\nBug: 295394788\nTest: mma -j\nChange-Id: I6c1411bef07c761fb2fb3fb38c27801ac4cffc57\n"
    },
    {
      "commit": "4a33c22c77c09d993d24b0831cf45399d76cc6b4",
      "tree": "3ce04361ac4fd36b1aced19ffdf1b339076513d7",
      "parents": [
        "f161ee27710248c973e188d5e61c76e473c86d52",
        "c6ce48ef190d74b11c265076518dcc69f6fe4665"
      ],
      "author": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Wed Jul 19 02:03:40 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 19 02:03:40 2023 +0000"
      },
      "message": "Merge \"String8: fix infinite loop and segmentation fault in removeAll()\" into main"
    },
    {
      "commit": "c6ce48ef190d74b11c265076518dcc69f6fe4665",
      "tree": "cbd6831f8dc319089889d1e6bf3bd5de8e0ca6c5",
      "parents": [
        "cb199b47955623746a021bdb91a04478b3bd3a7e"
      ],
      "author": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Fri Jul 14 16:35:09 2023 -0700"
      },
      "committer": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Tue Jul 18 16:02:07 2023 -0700"
      },
      "message": "String8: fix infinite loop and segmentation fault in removeAll()\n\nBug: 290835996\nTest: libutils_fuzz_string8 for several minutes\n\nString8::removeAll() has 2 serious problems:\n\n1. When `other` is an empty string, `removeAll()` will loop infinitely\n   due to below process:\n\n   a) with `other` being empty string `\"\"`, find() will call strstr()\n      on an empty string, which always returns `mString`, and thus\n      find() always return 0 in this case\n   b) with find() returns 0 for empty string, the next while loop in\n      String8::removeAll() will keep loop infinitely as `index` will\n      always be 0\n\n   This CL fixes this problem by returning true if `other` is an empty\n   string (i.e. `strlen(other) \u003d\u003d 0`), this follows the logic that an\n   empty string will always be found and no actual remove needs to be\n   done.\n\n2. When `other` is a NULL string, strstr() has undefined behavior. See\n   https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf.\n\n   This undefined behavior on Android unfortunately causes immediate\n   segmentation fault as the current `strstr` implementation in bionic\n   libc doesn\u0027t check `needle` being NULL, and an access to a NULL\n   location is performed to check if the `needle` string is an empty\n   string, and thus causes segmentation fault.\n\n   This CL gives an error message and aborts instead of having a\n   segfault, and to keep some backward compatibility.\n\n   This CL also adds test for String8::removeAll()\n\nChange-Id: Ie2ccee6767efe0fed476db4ec6072717198279e9\n"
    },
    {
      "commit": "435b520bf090ed720bf7b7b4e24f4e751de0adc5",
      "tree": "463d7ba268821edd10c976d6b6185e9dc14db4ba",
      "parents": [
        "8dad4b2b8a5b9311fe6022120fbef3a21ac53b43",
        "749becfa689186a6ab5cc6d83f9f470cced9b05c"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Tue Jul 18 21:49:06 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 18 21:49:06 2023 +0000"
      },
      "message": "Merge \"Fix libutils_fuzz_string8 deadlock.\" into main"
    },
    {
      "commit": "749becfa689186a6ab5cc6d83f9f470cced9b05c",
      "tree": "f413d8b2a8618a68f750e1b77e60690edd653a3d",
      "parents": [
        "740c0d274c22cdf1c1744cc4c0d7213b23fff8ed"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Jul 13 21:19:50 2023 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 18 21:04:07 2023 +0000"
      },
      "message": "Fix libutils_fuzz_string8 deadlock.\n\nBug: 290835996\nTest: libutils_fuzz_string8 for several minutes\nChange-Id: I9b312dd968c380f4fa2a837d38121d0a7a7ac7b1\n"
    },
    {
      "commit": "cb199b47955623746a021bdb91a04478b3bd3a7e",
      "tree": "0651e39f42d1f1604f0df714c1cb5eb7ff1e220c",
      "parents": [
        "dc8ae8c55a0dc78be9a8cae109294e1ee645280b"
      ],
      "author": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Wed Nov 30 16:05:49 2022 -0800"
      },
      "committer": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Wed Jul 12 13:23:07 2023 -0700"
      },
      "message": "libutils: Improve performance of utf8_to_utf16/utf16_to_utf8\n\nThis CL improves the performance of below functions in helping with conversion\nbetween utf8/utf16 with libutils:\n\n  - utf8_to_utf16_length\n  - utf8_to_utf16\n  - utf16_to_utf8_length\n  - utf16_to_utf\n\nThe basic idea is to keep the loop as tight as possible for the most\ncommon cases, e.g. in UTF16--\u003eUTF8 case, the most common case is\nwhen the character is \u003c 0x80 (ASCII), next is when it\u0027s \u003c 0x0800 (\nmost Latin), and so on.\n\nThis version of implementation reduces the number of instructions\nneeded for every incoming utf-8 bytes in the original implementation\nwhere:\n\n  1) calculating how many bytes needed given a leading UTF-8 byte\n     in utf8_codepoint_len(), it\u0027s a very clever way but involves\n     multiple instructions to calculate regardless\n\n  2) and an intermediate conversion to utf32, and then to utf16\n     utf8_to_utf32_codepoint()\n\nThe end result is about ~1.5x throughput improvement.\n\nBenchmark results on redfin (64bit) before the change:\n\nutf8_to_utf16_length: bytes_per_second\u003d307.556M/s\nutf8_to_utf16:        bytes_per_second\u003d246.664M/s\nutf16_to_utf8_length: bytes_per_second\u003d482.241M/s\nutf16_to_utf8:        bytes_per_second\u003d351.376M/s\n\nAfter the change:\n\nutf8_to_utf16_length: bytes_per_second\u003d544.022M/s\nutf8_to_utf16:        bytes_per_second\u003d471.135M/s\nutf16_to_utf8_length: bytes_per_second\u003d685.381M/s\nutf16_to_utf8:        bytes_per_second\u003d580.004M/s\n\nIdeas for future improvement could include alignment handling and loop\nunrolling to increase throughput more.\n\nThis CL also fixes issues below:\n\n  1. utf16_to_utf8_length() should return 0 when the source string has\n     length of 0, the original code returns -1 as below:\n\n    ssize_t utf16_to_utf8_length(const char16_t *src, size_t src_len)\n    {\n        if (src \u003d\u003d nullptr || src_len \u003d\u003d 0) {\n            return -1;\n        }\n\t...\n\n  2. utf8_to_utf16() should check whether input string is valid.\n\nChange-Id: I546138a7a8050681a524eabce9864219fc44f48e\n"
    },
    {
      "commit": "f5d4edaa31198f8c9559c598a6c6774cec2dfb0e",
      "tree": "65029846bad085055b2254930ab69942d8090393",
      "parents": [
        "f43e20c9b4010ee8c5056bf6ab27e789a769e51b",
        "379d5c83d58fa78d4d919a26488e83b26fd6639d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Sat Jul 01 01:28:13 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jul 01 01:28:13 2023 +0000"
      },
      "message": "Merge \"libutils: rewrite Vector fuzzer\""
    },
    {
      "commit": "379d5c83d58fa78d4d919a26488e83b26fd6639d",
      "tree": "b231ce58d4a3a21f04a265a4999cbe52253e0229",
      "parents": [
        "14777142624874f921f0d1c8079626386c590215"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Jul 01 00:27:23 2023 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Jul 01 00:28:48 2023 +0000"
      },
      "message": "libutils: rewrite Vector fuzzer\n\nIt could never have gotten much coverage.\n\nBug: 288741501\nTest: libutils_fuzz_vector (2,000,000 iterations)\n                           (~60k-100k iterations/s)\nChange-Id: I6f442642b5a3246dd08784f735db5aad5fd4d398\n"
    },
    {
      "commit": "aab4105ef617c9bc806d14a585e59ec7546ff25d",
      "tree": "c46443fe9a4e480d545ed99c8f5884efabf84359",
      "parents": [
        "14777142624874f921f0d1c8079626386c590215"
      ],
      "author": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Tue Jun 27 16:06:35 2023 -0700"
      },
      "committer": {
        "name": "Tomasz Wasilczyk",
        "email": "twasilczyk@google.com",
        "time": "Wed Jun 28 11:21:47 2023 -0700"
      },
      "message": "Drop const assignment operator.\n\nAlso, silence cert-oop54-cpp - self-assignment is already handled in\nVectorImpl class.\n\nBug: 289151149\nTest: it builds\nChange-Id: I8be7714ed53d1515df7cfdf6de6f3c90b3e5cc76\n"
    },
    {
      "commit": "2aba0a228324b2868e62df074fac616d7cc4e609",
      "tree": "25528cfaccb0babd8db3b96036314c0a9ad629fa",
      "parents": [
        "61b9935e50ed5aa5ad642691e370a740db22271a"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Jun 14 23:08:02 2023 +0000"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Thu Jun 15 00:37:52 2023 +0000"
      },
      "message": "Fix LruCache, allow std:string caching\n\nThe default initalization for mNullValue uses 0 which is in the case of\na std::string TValue will invoke the contructor with undefined behavior\nparameter.\n\nUsing an empty uniform initialization {} addresses the problem.\n\nTest: Already tested in lrucache_test.cpp\nBug: 257127748\nChange-Id: I37420ce8a16c99f3014538a0208d7e113870b1c7\n"
    },
    {
      "commit": "b3e1993ee55269694c345743191a67fbdc443e97",
      "tree": "452e1ccb205b162057d713005006fefb6e49b71a",
      "parents": [
        "da739b2eeaa3ce12f7978e6d293b39545ebf1ce6"
      ],
      "author": {
        "name": "Hao Chen",
        "email": "chenhaosjtuacm@google.com",
        "time": "Wed May 31 14:18:59 2023 -0700"
      },
      "committer": {
        "name": "Hao Chen",
        "email": "chenhaosjtuacm@google.com",
        "time": "Mon Jun 05 13:49:17 2023 -0700"
      },
      "message": "Add the Missing Header\n\n`stderror` is used in this file and it is defined in `string.h/cstring`, so\nthe header file needs to be directly included.\n\nTest: build\nBug: 285204695\nChange-Id: Idf34126626ad0e9bb397df3d5da50439bf18381d\n"
    },
    {
      "commit": "3e8ad4d546d401ad9da77c3d67ebd6ca19cd2c59",
      "tree": "86b964992ead6dd5afeb79c930f881d9d2e82787",
      "parents": [
        "25613816d80d00680db90c5bd280587fdf84b1a0"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 31 10:19:54 2023 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 31 10:19:54 2023 -0700"
      },
      "message": "Halve iteration count for some RefBase tests\n\nThe RacingDestructors test was occasionally timing out, by non-huge\namounts. Halve the number of iterations for long-running tests here.\n\nBug: 284964396\nTest: Treehugger\nChange-Id: If639ce98fbeb783431f07006dece4cd69f9f8b50\n"
    },
    {
      "commit": "6634c1741e4b7dc2b5ffdec8ca4725a25786b1c3",
      "tree": "5612a46a4129c0d6d4a335dfac9da3aea13e78d3",
      "parents": [
        "396b107a41c217269e8ab5815082ae7366e074b7"
      ],
      "author": {
        "name": "zijunzhao",
        "email": "zijunzhao@google.com",
        "time": "Wed Mar 01 23:30:29 2023 +0000"
      },
      "committer": {
        "name": "zijunzhao",
        "email": "zijunzhao@google.com",
        "time": "Wed Mar 01 23:30:29 2023 +0000"
      },
      "message": "Fix the missing std\n\nBug: b/239662094\nTest: enable Wunqualified-std-cast-call locally and run m to build\nChange-Id: I203af8dbbbf1d889b9fc5efd5b62fa165ee09dc2\n"
    },
    {
      "commit": "ff9e640e435c5cec869758459fd76982e10ca1d6",
      "tree": "91595bfd25536337f2103a1e250a114dabba5db3",
      "parents": [
        "f6fe4fc9fa0e326d656abdc094646687517f6e8c"
      ],
      "author": {
        "name": "Zhi Dou",
        "email": "zhidou@google.com",
        "time": "Fri Dec 09 22:30:57 2022 +0000"
      },
      "committer": {
        "name": "Zhi Dou",
        "email": "zhidou@google.com",
        "time": "Tue Dec 20 16:05:54 2022 +0000"
      },
      "message": "Replace \"apex_inherit\" min_sdk_version\n\nReplace \"apex_inherit\" min_sdk_version to a conditional setting. If\nenvironment veriable KEEP_APEX_INHERIT is set, using \"apex_inherit\" as\nthe min_sdk_version, otherwise set the number to \"29\". For more detail\nplease refer\nhttps://docs.google.com/document/d/1R2vZw0cQa-haAMgFyQ682uSq9aGBNQrzMHKIsU17-XY/edit?usp\u003dsharing\u0026resourcekey\u003d0-gUbs463r9LCKs7vdP_Xkmg\n\nTest: build APEX uses this library, and presubmit\nBug: 254634795\nChange-Id: If7acfce5fb2e1cb1cc7208a8c57b1e1cd1499c11\nMerged-In: Ie6984128e6b84ba73de3f4c08eca5560657c5ca2\n"
    },
    {
      "commit": "20d45cc9ce03dfd94c540fc4b21ec735d7313bb2",
      "tree": "a8460406f70a0a7cd00ad286d436e8c8653412d1",
      "parents": [
        "1a72f42e52243db835ad4731f1c7b487d7fa1708",
        "3de02bd0d5413fe41893515ee4eb172a0497d82e"
      ],
      "author": {
        "name": "Hsin-Yi Chen",
        "email": "hsinyichen@google.com",
        "time": "Fri Dec 09 01:57:43 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 09 01:57:43 2022 +0000"
      },
      "message": "Merge \"Add an ABI dump directory for libutils\""
    },
    {
      "commit": "3de02bd0d5413fe41893515ee4eb172a0497d82e",
      "tree": "c88318bfe3de060d1a9f7e3112d2f0396eae6b2e",
      "parents": [
        "70b22e1c5bf962cf3a79d39e7603f5a68383b04b"
      ],
      "author": {
        "name": "Hsin-Yi Chen",
        "email": "hsinyichen@google.com",
        "time": "Tue Dec 06 17:19:42 2022 +0800"
      },
      "committer": {
        "name": "Hsin-Yi Chen",
        "email": "hsinyichen@google.com",
        "time": "Thu Dec 08 11:06:22 2022 +0800"
      },
      "message": "Add an ABI dump directory for libutils\n\nThe ABI dumps add visibility for API changes in a commonly used library.\n\nTest: development/vndk/tools/header-checker/utils/create_reference_dumps.py \\\n      -libs libutils -products aosp_arm64 \\\n      -ref-dump-dir system/core/libutils/abi-dumps\nTest: m libutils.vendor\nBug: 227282691\nChange-Id: I498c62853562a8fc6702bdd622603b6f7d516274\n"
    },
    {
      "commit": "c2527073c2810bcf79625a22e3b8a78e7a5eee11",
      "tree": "63a3eb5cb356914aabcc6f7fa793b7799041c1e4",
      "parents": [
        "f9e6c5104d4d0be8661006e75ae2f5b8d227df12"
      ],
      "author": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Wed Nov 30 16:04:55 2022 -0800"
      },
      "committer": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Tue Dec 06 15:14:27 2022 -0800"
      },
      "message": "libutils: Add more tests for Unicode\n\nThis CL added additional tests for converting between utf16 and utf8,\nspecifically tests that:\n\n  1. check utf16_to_utf8_length() returns 0 if input is an\n     empty UTF16 string\n\n  2. check utf16_to_utf8_length() returns 1 if input is a\n     single ASCII character UTF16 string\n\n  3. check utf16_to_utf8_length() returns 3 if input is a\n     single UTF-16 character between U+0800 - U+FFFF\n\n  4. check utf16_to_utf8_length() returns 4 if input has\n     a surrogate pair\n\n  5. check unpaired UTF-16 surrogate is handled correctly\n     (skipped)\n\n  6. check utf16_to_utf8_length(0 handles invalid surrogate\n     case correctly, by skipping the first but handling the\n     rest correctly\n\n  7. check a normal string with a mix of 1/2/3/4-byte UTF8\n     characters is correctly converted by utf16_to_utf8()\n\n  8. check conversion from invalid utf8 sequence with invalid\n     leading byte and/or invalid trailing byte(s) should still\n     work and not crash\n\nChange-Id: If68e514af0e84ddebf5900b2e140e76ba4f44553\n"
    },
    {
      "commit": "890f0649902767e93eeac2c7fbad6bacde21ece1",
      "tree": "d4a89b8280684543adda26b8686b55ddfe441db8",
      "parents": [
        "ccf13942e05ce18c1365f4d8703de6d8fd1c6e6d"
      ],
      "author": {
        "name": "Biswapriyo Nath",
        "email": "nathbappai@gmail.com",
        "time": "Fri Nov 25 12:15:47 2022 +0530"
      },
      "committer": {
        "name": "Biswapriyo Nath",
        "email": "nathbappai@gmail.com",
        "time": "Fri Nov 25 12:15:53 2022 +0530"
      },
      "message": "libutils: Fix missing definition of shared_ptr and unique_ptr\n\nThis includes memory header for shared_ptr and unique_ptr templates.\nFixes the following errors:\n\nRefBase.h:803:1: error: ‘shared_ptr’ does not name a type\nRefBase.h:810:1: error: ‘unique_ptr’ does not name a type\n\nChange-Id: I6a7a67333c9ef05250c5a3c6199d7fac288f946b\n"
    },
    {
      "commit": "9e25bf0136d085b1a825afeed308f2f364110c61",
      "tree": "1dbbe8b4f83f07a6d565979ac7894242b3c9f62b",
      "parents": [
        "7014fa9fa31412e6241a8dd47bce62a2ca55af68"
      ],
      "author": {
        "name": "Biswapriyo Nath",
        "email": "nathbappai@gmail.com",
        "time": "Fri Oct 21 10:26:01 2022 +0530"
      },
      "committer": {
        "name": "Biswapriyo Nath",
        "email": "nathbappai@gmail.com",
        "time": "Fri Oct 21 10:26:08 2022 +0530"
      },
      "message": "libutils: Include limits for std::numeric_limits::max\n\nThis fixes the following error:\ncore/libutils/String8.cpp:316:67: error: incomplete type \u0027std::numeric_limits\u003clong long unsigned int\u003e\u0027 used in nested name specifier\n  316 |         if (static_cast\u003csize_t\u003e(n) \u003e std::numeric_limits\u003csize_t\u003e::max() - 1 ||\n      |                                                                   ^~~\n\nChange-Id: I80cdd2442e2798c37e066e3fdeee7dd5ac34b669\n"
    },
    {
      "commit": "b7412c8cd6c1428183866b47052131fc694837fa",
      "tree": "4c276ec3a73bc8734c4b237090f2386d56aec3ec",
      "parents": [
        "377adea81ccd56bfbf684db2e70ab7d261870119"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 08 05:07:52 2022 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Oct 10 16:58:57 2022 +0000"
      },
      "message": "libutils: RefBase DEBUG_REF love\n\nDone here:\n- path saved to a useable location on host\n- path always printed (for visibility for new users)\n- open(.., 666) - That\u0027s \u002701204\u0027 not \u00270644\u0027 oops\n\nFuture considerations:\n- make defines constexpr instead of ifdef\n- copy malloc hook design to avoid needing to recompile code\n- make libutilscallstack default on host\n- run libutils tests, not just test compile debug mode\n- code incorrectly prints ref \u0027doesn\u0027t exist\u0027\n  seems it\u0027s gotten out of sync, but still good enough\n  to use stacktraces\n\nBug: 244325464\nTest: manual\nChange-Id: I732e5b8aec3cd946ef3559a2a814caf693846cc0\n"
    },
    {
      "commit": "377adea81ccd56bfbf684db2e70ab7d261870119",
      "tree": "bbf1a1a173758abe1404627c6383d69f3327ed85",
      "parents": [
        "27cf51e71c978bf19a2439bdb631417bf57abbde"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 08 05:06:52 2022 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Sat Oct 08 05:13:47 2022 +0000"
      },
      "message": "libutils: DEBUG_* modes compile forever\n\nI\u0027ve seen these fixed before, so we compile the debug modes\nnow.\n\nBug: 244325464\nTest: \u0027m libutils_test_compile\u0027\nChange-Id: I4271909e81893ad448bc46b8a3a567a84c40f8a3\n"
    },
    {
      "commit": "b795d6fa4b2a5721df5499c7d30e66e4b62c94ed",
      "tree": "d21a9149f4e1984352bef30a1499e42c7cab27d1",
      "parents": [
        "565305b85200aad7908a05445efad090d365fd23"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 14 20:15:19 2022 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 14 20:16:25 2022 +0000"
      },
      "message": "Fix the build with a newer LLVM.\n\nUnify all our \"noinline\" variants to the current most common one, not\nleast because the new [[noinline]] syntax is fussier about where it goes.\n\nTest: treehugger\nChange-Id: Icfcb75c9d687f0f05c19f66ee778fd8962519436\n"
    },
    {
      "commit": "15fee822470654e722879e1e5d6b50008637af0c",
      "tree": "bc13e36b4efcdcac08eb8e72f9ad1ecf226afde8",
      "parents": [
        "61c82abe24ae265e41b1176077696814dceef137"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 12 18:00:10 2022 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 12 18:37:22 2022 -0700"
      },
      "message": "Fix thread unwind in CallStack.\n\nThe CallStack unwind of a different thread was broken since it\nwasn\u0027t properly setting the tid value.\n\nFix this problem and add new unit tests to verify the behavior.\n\nBug: 246405269\n\nTest: New unit tests pass.\nTest: Ran unit tests for 1000 operations to verify not flaky.\nChange-Id: I00342e6cdcdb4bcb68f29734dadee6c987c98040\n"
    },
    {
      "commit": "4913ca88e5929a59aecd1b5249abfc8542537faf",
      "tree": "c232c1de0d59417d0b0e6e38afe412b97bec27df",
      "parents": [
        "0d78c9a0af5694e7114e275172fee4c0769b9c59"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Aug 26 20:24:57 2022 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Aug 26 20:24:57 2022 -0700"
      },
      "message": "Remove unnecessary std::unary_function base classes\n\nThe function objects work equally well without them, and the base\nclasses were wrong for both types:\n * HashForEntry: returns size_t but declared to return hash_t\n   (uint32_t)\n * EqualityForHashedEntries: returns bool and takes two parameters but\n   declared to return hash_t and take one parameter\n\nstd::unary_function was deprecated in C++11 and removed in C++17.\nUpstream libc++ now removes the type for new-enough C++ dialects.\n\nBug: http://b/175635923\nTest: treehugger\nChange-Id: I2ff15c5da6a4e4f71df08c243f8af2f11d8d2b0d\n"
    },
    {
      "commit": "643d08e706e152417dfcd34089c78fed27adf54e",
      "tree": "b08986afe2a2ab9c4ae4b60ee98b25389df2e5e2",
      "parents": [
        "5ac8fb1c0ba5c8a95f5367333ff6a873c05d51bc",
        "5daa3bb90e1eb1f13631c0eaa2d3b0ebd2751011"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Jul 29 18:31:32 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Jul 29 18:31:32 2022 +0000"
      },
      "message": "Merge \"RefBase: test for stack check\" am: 5daa3bb90e\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2169132\n\nChange-Id: Ib7b35af8469fdc563244f2dde4a4e0ee91e7f35a\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "5daa3bb90e1eb1f13631c0eaa2d3b0ebd2751011",
      "tree": "7254b64c66a574be7e59e0ce0161875cd0e75290",
      "parents": [
        "811eed3bb6d13cf38b736745d3759178f24c3497",
        "cd4ef87efdf88cb5abc17ee6739208b3386420ec"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Jul 29 18:10:03 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 29 18:10:03 2022 +0000"
      },
      "message": "Merge \"RefBase: test for stack check\""
    },
    {
      "commit": "cd4ef87efdf88cb5abc17ee6739208b3386420ec",
      "tree": "7a68c4566bac47defc07ded47679b71b90a9fd7b",
      "parents": [
        "51e98b83789c0ae840acc5c78dd785b94d4d7dfd"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Jul 29 00:40:29 2022 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Jul 29 00:54:57 2022 +0000"
      },
      "message": "RefBase: test for stack check\n\nSurprised this isn\u0027t breaking anything, so wanted to\nmake sure it worked.\n\nBug: 232557259\nTest: libutils_test\nChange-Id: Iaec47d644c02dc190e397c6f84dcfab4cc76f566\n"
    },
    {
      "commit": "c55c68fe33ab593a550f57d4a81f8edbacb171b0",
      "tree": "f94e31f88a721449669b18a7c9f64a203bbc6c0e",
      "parents": [
        "de52706513874b4abca6fa9ae8b6d494ef7864e2",
        "ea25b4ba5b9d3b78c20f5056b17e629f5d0ed7d4"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Jul 28 23:45:34 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Jul 28 23:45:34 2022 +0000"
      },
      "message": "Merge \"libutils: disallow extending lifetime on stack\" am: ea25b4ba5b\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2166445\n\nChange-Id: I48eb86eb8426b1e5c7c92f957173b2eb63870864\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "ea25b4ba5b9d3b78c20f5056b17e629f5d0ed7d4",
      "tree": "426cf69a390748632085688f283aebe498662541",
      "parents": [
        "51e98b83789c0ae840acc5c78dd785b94d4d7dfd",
        "d086fe51092b6302cf2fc5a460e63393726468e5"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Jul 28 23:17:35 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 28 23:17:35 2022 +0000"
      },
      "message": "Merge \"libutils: disallow extending lifetime on stack\""
    },
    {
      "commit": "de52706513874b4abca6fa9ae8b6d494ef7864e2",
      "tree": "ed495d3568edd3b719eabdb530790ee33d33ef16",
      "parents": [
        "f0049583dc7d2f2daf6eb286c65fdd6850d846c7",
        "51e98b83789c0ae840acc5c78dd785b94d4d7dfd"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Jul 28 16:29:49 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Jul 28 16:29:49 2022 +0000"
      },
      "message": "Merge \"libutils: RefBase always disallow on stack\" am: 51e98b8378\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2166102\n\nChange-Id: Ia8b3205fbb6e36b3c85a378df4c63db4f32759f5\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "51e98b83789c0ae840acc5c78dd785b94d4d7dfd",
      "tree": "3867838d31effe8e8915e6a14e93fa40afe11a3e",
      "parents": [
        "ef46fe4e2b5f1909b9e9a4ae66f70a859211d1d6",
        "c340a08b1b2d439f482144d03df1a781c26cb0e5"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Jul 28 16:11:10 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 28 16:11:10 2022 +0000"
      },
      "message": "Merge \"libutils: RefBase always disallow on stack\""
    },
    {
      "commit": "414bab91ebb3db16ed8cf92cf1689947e51aed91",
      "tree": "37a5ea68f73ee6e1b45bf2aedc4c9c5caf1f4af9",
      "parents": [
        "81b1c57c0d0bb97b04dea73af8e4a550819101fb",
        "b0fe01da56027365d91f61231de69775e20d6b7d"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 26 22:27:26 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Jul 26 22:27:26 2022 +0000"
      },
      "message": "Merge \"libutils: RefBase: extra check for double own\" am: b0fe01da56\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2166103\n\nChange-Id: Ie252e8a229d8151aad82347f6b216dbed752d86b\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    }
  ],
  "next": "d086fe51092b6302cf2fc5a460e63393726468e5"
}
