)]}'
{
  "log": [
    {
      "commit": "c1341e179e48523198c859947727cf79271a9f83",
      "tree": "64f5c1f3dfd62c94df454e612c5389d3f7631c58",
      "parents": [
        "d05459d2291178ad1d2c19c8823354c5d5284067"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jul 11 19:48:08 2024 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jul 11 19:52:34 2024 -0700"
      },
      "message": "Add a log_allocator_stats_on_exit option.\n\nRunning some types of executables, you want to get the stats at\nthe end of the run. Therefore, add an option to dump the allocator\nstats when the program finishes.\n\nAdd new unit tests to cover this new option.\n\nTest: All unit tests pass.\nTest: Enabled the option, ran getprop and verified that the\nTest: log contains the allocator stats.\nChange-Id: I1c9f7d5a1fe374e8cfb6ffc8d1caa59064c5d55e\n"
    },
    {
      "commit": "9b88d0a3fef930af8e9499a6b32cbdd432185858",
      "tree": "1f181c2c14df4bb29c89fb347932f2413228bc5b",
      "parents": [
        "de051b5d527ac72f949f3601dd2053fe11e312c1"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 13 13:22:02 2024 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jun 18 14:34:42 2024 -0700"
      },
      "message": "Add record_allocs_on_exit option.\n\nAdd a config parameter \"record_allocs_on_exit\" that will cause the\ncurrently recorded set of allocs to be dumped to a file when\nthe process exits.\n\nUpdate the documentation, and add new unit tests.\n\nTest: Unit tests pass.\nChange-Id: I81d31bc63b8a6709697533c5099dcc6444c11d47\n"
    },
    {
      "commit": "5610d5a3a4df2fe6e50efc4b03cb5266a00b0d4a",
      "tree": "cef232a785369c2ff3cdbd1390fd6213e817c995",
      "parents": [
        "c20bf013a186b31b498cb77771f881a0e4037cbd"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 14 15:04:50 2023 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 28 13:29:42 2023 -0800"
      },
      "message": "Add support for signal dumping log stats.\n\nAdding the new option log_allocator_stats_on_signal that will call\nmallopt(M_LOG_STATS, 0), when a signal is sent to a process.\n\nThis call does not happen in the signal handler, but a variable\nis set to trigger the mallopt call. The next time any allocation\ncall occurs, the mallopt call will be made.\n\nAlso, includes new unit tests for the new config option.\n\nTest: All unit tests pass.\nTest: Enabling the new feature and stop/start and sending the signal to\nTest: a process and observing the log contains the memory stats.\nTest: Did the above for a scudo and jemalloc based device.\nChange-Id: Idcf6fca74036efb065b9c4cc037aaf9bcf0f139e\n"
    },
    {
      "commit": "a383648d3a0057264882d4b4a54f06fe0a61f912",
      "tree": "513852af8fd45f3f8ae02be4000cf7c0fcaa6607",
      "parents": [
        "c7b31befbfba5e96862bd75b24a6d2ba3bf7b0d4"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri May 13 12:09:39 2022 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 18 17:05:05 2022 -0700"
      },
      "message": "Add options to only backtrace specific sizes.\n\nAdd backtrace_size for only backtracing a single size.\nAdd backtrace_min_size to set the minimum value of size to backtrace.\nAdd backtrace_max_size to set the maximum value of size to backtrace.\n\nDocumented the new options.\n\nTest: New unit test pass.\nChange-Id: I1a773737910cd4bc2af9546547b3a2740bbcb22b\n"
    },
    {
      "commit": "b42e8b4dec33daec51f40936c81cfe922931f431",
      "tree": "507f75e675d72c981002bbf102fa984fba84ae6f",
      "parents": [
        "de9fe1e2de37e35081b331455b557915b07e6df7"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 09 14:00:47 2022 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue May 10 17:37:19 2022 -0700"
      },
      "message": "Add option to force memunreachable check.\n\nThe new option is named check_unreachable_on_signal. It is meant\nto duplicate dumpsys meminfo --unreachable \u003cPID\u003e for non-java\nprocesses. When enabled, a user can send a signal to a process\nwhich will trigger the unreachable check on the next allocation\ncall.\n\nAdded new unit tests.\n\nTest: New unit tests pass.\nTest: Enabled for the entire system, then dumped on the netd\nTest: process and also system_server.\nChange-Id: I73561b408a947a11ce21a211b065d59fcc39097b\n"
    },
    {
      "commit": "c328e4465d12d760f5fbcb2daddf5fa4138f50b1",
      "tree": "fd91c386332bbe1198cb0bedc11505b76d146057",
      "parents": [
        "4699cf61746d37fc11c8eb8bdfc7eb296a476e4b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 01 19:31:26 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 02 10:55:21 2019 -0700"
      },
      "message": "Disable info messages by default for malloc debug.\n\nAdd a new option verbose for malloc debug that is not enabled by default.\nThis disables all of the info log messages. It turns out these log\nmessages can add a measurable amount of time and can change the boot up.\n\nBug: 129239269\n\nTest: Adjusted unit tests pass.\nTest: Verified no messages unless verbose option used.\nChange-Id: I805cb7c8ecb44de88119574e59d784877cacc383\n"
    },
    {
      "commit": "7f209a979c55a58e91946a2efd5f0b339ffe309c",
      "tree": "481e04cf25531a9ced30b032bb5ba93f06de674e",
      "parents": [
        "822326db922ac5d0e4dea8cff1d774e8f04db94a"
      ],
      "author": {
        "name": "Iris Chang",
        "email": "iris.chang@mediatek.com",
        "time": "Wed Jan 16 11:17:15 2019 +0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jan 22 15:54:36 2019 -0800"
      },
      "message": "Bionic malloc debug: add a new option \"abort_on_error\"\n\nThis new option causes an abort after malloc debug detects an error.\nThis allows vendors to get process coredumps to analyze memory for\ncorruption.\n\nBug: 123009873\nTest: New test cases added for unit tests and config tests.\n\nChange-Id: I6b480af7f747d6a82f61e8bf3df204a5f7ba017f\n"
    },
    {
      "commit": "93bdd6ae3ad8322b7be2be0201c8db7227631d14",
      "tree": "42ee959b96c2c2db42f0569554680dbe22ce39ef",
      "parents": [
        "4c5c45346fcc6f066a89bfc455f287fe2f4e3e41"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 05 11:12:38 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 24 08:44:53 2018 -0700"
      },
      "message": "Add support for using the new unwinder.\n\nThis adds a new option backtrace_full, when it is set, then it will use\nlibunwindstack.\n\nModify the dump to file data to dump the extra information from libunwindstack.\nAlong with the new dump file format, change the version to v1.1.\nUpdated document for new format of file data.\n\nAdd unit tests for the new functionality.\n\nBug: 74361929\n\nTest: Ran unit tests.\nChange-Id: I40fff795f5346bba7b9d7fde2e04f269ff4eb7f1\n"
    },
    {
      "commit": "4da2503d70dc4bc1444454876e3794b69227d90d",
      "tree": "d904c750ebac96aee76df44baad1320c0db211a3",
      "parents": [
        "a3f6f6c1b9135c90e410f5382b153db9a43a4db0"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 07 13:38:48 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 02 18:59:23 2018 -0700"
      },
      "message": "Refactor malloc debug.\n\nChanges\n- Refactor the code so that only guards require creating a special header\n  for every pointer allocated.\n- Store only a single copy of every backtrace. This saves memory so that\n  turning on the backtrace option doesn\u0027t result in 10X memory usage.\n- Added new option track_allocs that only verifies pointers are valid for\n  free/malloc_usable_size/realloc.\n- Remove suffix from test names.\n- Add the TRACK_ALLOCS options to all guard options.\n- Add new option verify_pointers that is a lightweight way to verify\n  pointers that are passed to allocation routines.\n- Do auto-formatting of the code.\n- Updated documentation for all of these changes.\n\nBug: 74361929\n\nTest: Ran unit tests.\nTest: Ran libmemunreachable unit tests.\nTest: Ran an app with backtrace enabled.\n\nChange-Id: I3246c48ae4f9811f64622d90d0a9b4d9d818702c\n"
    },
    {
      "commit": "cbc80ba9d839675a0c4891e2ab33f39ba51b04b2",
      "tree": "0b24e6123c94bd3e61d94fd6eca6a3b9cc9b074e",
      "parents": [
        "3374d0cabb973ff2b73ad8cd909389bdeed18658"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 14:26:29 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 14:27:17 2018 -0800"
      },
      "message": "Switch the rest of our internal headers to #pragma once.\n\nWe\u0027ve been using #pragma once for new internal files, but let\u0027s be more bold.\n\nBug: N/A\nTest: builds\nChange-Id: I7e2ee2730043bd884f9571cdbd8b524043030c07\n"
    },
    {
      "commit": "602b88ccddfafdefec023e7599d49c811ad3214f",
      "tree": "11730f3f0cbc308860c4e45d6f0310c7f2083041",
      "parents": [
        "e0e2798f11ca082fe0a796f167f9006c51dc3304"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Aug 04 13:04:04 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Sep 05 15:57:00 2017 -0700"
      },
      "message": "Provide method to dump backtrace heap data.\n\nFor non-zygote spawned processes, we might want to dump the backtrace\ndata. Provide a method to send a signal to a process and then dump the\ndata to a file.\n\nAdds a method to dump the backtrace data on exit.\n\nUpdate documentation and explain format of heap dump data.\n\nTest: Ran unit tests, enabled new options and used them.\nChange-Id: Ie2fa706694160731afe02c1382b037d06df1d069\n"
    },
    {
      "commit": "2b2b25b87827102671cdd4b25c01aa22a9971a63",
      "tree": "d318825c7548379a307beee5b78580e51ce97a52",
      "parents": [
        "e06c69d07324f3da67aa063202e698dedd831365"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 05 19:13:03 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 06 15:30:42 2017 -0700"
      },
      "message": "Refactor Config from a struct to a class.\n\nThis should make it easier to add new options, and to add options that\nare complex. For example, I want to modify the behavior of\nrecord_allocs_file so that it also enables record_allocs to a default\nstate.\n\nTest: All unit tests pass.\nTest: Enable the backtrace option and restart.\nChange-Id: Idf5cdeed06ade3bc2c8ae39d228734bf65209b4f\n"
    },
    {
      "commit": "ac81fe8657119c265edcc2f05b3e5b7c5b17ae9f",
      "tree": "99a6e825926829bb7c8d955cbc96ae1777691ef9",
      "parents": [
        "8945d5e43a25737f3f888a90742cc918b1124a05"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Fri Aug 26 15:54:59 2016 +0100"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Nov 17 13:13:27 2016 -0800"
      },
      "message": "Enable malloc debug using environment variables\n\nPreviously malloc debug can be enabled only using global settings\naccessible to the root user only. This CL adds a new option to enable\nit using environment variables making it possible to use it with pure\nnative (shell) applications on production builds (from shell user) and\nprepares it for using it from logwrapper on production devices.\n\nRemove the old environment variable and property since they are not\nnecessary.\n\nTest: Enable malloc debug using environment variable and verify\nTest: that it only affects the commands launched from the shell.\nTest: Enable malloc debug using the property variable and verify\nTest: that it affects all commands.\nTest: Run all unit tests in 32 bit and 64 bit.\nChange-Id: Iecb75a3471552f619f196ad550c5f41fcd9ce8e5\n"
    },
    {
      "commit": "7bd01783a830f72c1245c262a7fd9a199e90aed1",
      "tree": "5bd657e6c452d5f9d81a6c9b156ee748c8a8f070",
      "parents": [
        "a0e205e3b4f7993affb864260e924ce9f20573d0"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 20 12:30:58 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 08 14:05:17 2016 -0700"
      },
      "message": "Add the record alloc option.\n\nThis option adds the ability to record all of the allocation requests\nand dump them to a file when a signal is sent to the process.\n\nIncluded in this change, redo the option processing to add a new\nstring option.\n\nBug: 27747898\n\nChange-Id: Ida043362e38b5eb1d459c99db9c2581015dab366\n"
    },
    {
      "commit": "55a89a48f41da349735627c2ae8985895955b1ca",
      "tree": "c946bd9b7e1353787f278e5face49cae5d8f238d",
      "parents": [
        "03a16d3db7c5fff733d28250212821ec2ff5eccd"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 07 17:14:53 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 12 15:36:53 2016 -0700"
      },
      "message": "Small refactor.\n\n- Move all ScopedDisableDebugCalls into the debug_XXX calls. This avoids\nany issues that might arise where every part of the code needs to properly\nguard anything that might allocate. Instead everything is already guarded.\n- Add a pointer to debug_data in all of the XXData classes. This avoids\ncalling individual functions passing in the debug_data pointer.\n- Flip the NO_HEADER_OPTIONS to an explicit HEADER_OPTIONS list since fewer\noptions actually require a header.\n- Move the extern of g_debug to the DebugData.h header.\n\nChange-Id: Ia213a391b4a44d9ce122a709d09fe4f1b5426f36\n"
    },
    {
      "commit": "72df6708c829a4c6494936fdfbda6dc7e68e647b",
      "tree": "17ede0d54b6f50c3598a3fcec56f50754067690d",
      "parents": [
        "72bca4b4105e24058f3f2eca024382bedb122a30"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 11 15:51:31 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 12 17:30:30 2016 -0800"
      },
      "message": "Fix the default alignment of the allocations.\n\nIn order to enforce this constraint:\n\nThe pointer returned if the allocation succeeds shall be suitably\naligned so that it may be assigned to a pointer to any type of object\nand then used to access such an object in the space allocated.\n\nForce all allocations on 32 bit systems to have 8 byte alignment,\nand all allocations on 64 bit systems to have 16 byte alignment.\n\nAdd a test to verify that the allocator returns the correct alignments.\n\nBug: 26739265\nChange-Id: I9af53279617408676b94e4ec6481b3ed7ffafc6a\n"
    },
    {
      "commit": "7993b80f894db20af4d1d154221c42fea6171a3d",
      "tree": "fc99d36000a8f0853224d75296d96509a730ee05",
      "parents": [
        "50647711ebaf2360aca05cc94a2fdf431c1a153e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 28 18:35:05 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jan 29 15:19:22 2016 -0800"
      },
      "message": "Add better free tracking.\n\nIncluded in this change:\n\n- Change the tag when a pointer is freed so it\u0027s easy to detect if\n  an already freed pointer is being used.\n- Move the free backtrace out of the header. This backtrace is only\n  used under only some circumstances, so no need to allocate space\n  in all headers for it.\n- Add new option free_track_backtrace_num_frames to specify how many\n  frames to record when the free occurs. This removes the dependency\n  on the backtrace option to get backtraces.\n\nBug: 26739265\nChange-Id: I76f5209507dcf46af67ada162a7cb2bf282116f2\n"
    },
    {
      "commit": "63860cb8fd1adf3f679b9b4ad876323a8d65cd9d",
      "tree": "25aeae686d92efcb5e08a54e8cba1e8c31efe33b",
      "parents": [
        "ad9c3f34f762ed45cce5dbb93218124ed31f6873"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 16 17:30:32 2015 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 25 10:54:21 2016 -0800"
      },
      "message": "Malloc debug rewrite.\n\nThe major components of the rewrite:\n\n- Completely remove the qemu shared library code. Nobody was using it\n  and it appears to have broken at some point.\n- Adds the ability to enable/disable different options independently.\n- Adds a new option that can enable the backtrace on alloc/free when\n  a process gets a specific signal.\n- Adds a new way to enable malloc debug. If a special property is\n  set, and the process has an environment variable set, then debug\n  malloc will be enabled. This allows something that might be\n  a derivative of app_process to be started with an environment variable\n  being enabled.\n- get_malloc_leak_info() used to return one element for each pointer that\n  had the exact same backtrace. The new version returns information for\n  every one of the pointers with same backtrace. It turns out ddms already\n  automatically coalesces these, so the old method simply hid the fact\n  that there where multiple pointers with the same amount of backtrace.\n- Moved all of the malloc debug specific code into the library.\n  Nothing related to the malloc debug data structures remains in libc.\n- Removed the calls to the debug malloc cleanup routine. Instead, I\n  added an atexit call with the debug malloc cleanup routine. This gets\n  around most problems related to the timing of doing the cleanup.\n\nThe new properties and environment variables:\n\nlibc.debug.malloc.options\n  Set by option name (such as \"backtrace\"). Setting this to a bad value\n  will cause a usage statement to be printed to the log.\n\nlibc.debug.malloc.program\n  Same as before. If this is set, then only the program named will\n  be launched with malloc debug enabled. This is not a complete match,\n  but if any part of the property is in the program name, malloc debug is\n  enabled.\n\nlibc.debug.malloc.env_enabled\n  If set, then malloc debug is only enabled if the running process has the\n  environment variable LIBC_DEBUG_MALLOC_ENABLE set.\n\nBug: 19145921\n\nChange-Id: I7b0e58cc85cc6d4118173fe1f8627a391b64c0d7\n"
    }
  ]
}
