)]}'
{
  "log": [
    {
      "commit": "5d1c3cb157c28d451bf1c074849ac4ad201a1de0",
      "tree": "fdbb71430b3b8139fa5cb30fa3d73bca163473e4",
      "parents": [
        "2122a3581a6db6767d37590b8ffc346ea959865c"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Jun 04 16:35:02 2019 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Jun 11 16:07:37 2019 -0700"
      },
      "message": "gdbclient: support various PT_INTERP values\n\ngdb looks for an executable\u0027s dynamic linker using the PT_INTERP setting\nfrom the executable. That value can be various things:\n - /system/bin/linker[64]\n - /system/bin/linker_asan[64]\n - /system/bin/bootstrap/linker[64]\n\nCurrently, only the bootstrap linker is available in the sysroot/symbols\ndirectory. The ordinary and ASAN linkers are symlinks on the target and\nare missing from the sysroot (aka symbols) directory.\n\nUse the executable\u0027s PT_INTERP value to find the symbolized linker binary\nand add it to the solib search path. If necessary, copy or pull a linker\nbinary.\n\nTest: gdbclient.py -r ls\n  \"info sharedlib\" shows $OUT/symbols/apex/com.android.runtime.debug/bin/linker64\n\nTest: gdbclient.py -r /data/nativetest64/bionic-unit-tests/bionic-unit-tests\n  \"info sharedlib\" shows $OUT/symbols/system/bin/bootstrap/linker64\n\nTest: m asan_test\n  gdbclient.py -r /data/nativetest64/asan_test/asan_test\n  \"info sharedlib\" shows /tmp/gdbclient-linker-HunVs9/linker_asan64\n\nBug: http://b/134183407\nChange-Id: I7f79943dcd9ec762d1aaf21178bb6ab3eff40617\n"
    },
    {
      "commit": "dcf9800c7e172acd88c121134d4948d8647db53f",
      "tree": "b40362c016fd4fed4ad6d6c2c67e02c428d00470",
      "parents": [
        "f504f3a6bac2b02bbc728b190409aa73271a15c6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Apr 30 10:07:24 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Apr 30 10:07:24 2019 -0700"
      },
      "message": "Stack: Fix argument-less invocation\n\nAdd nargs\u003d\u0027?\u0027 to allow a missing positional argument.\n\nBug: 131662960\nTest: manual\nChange-Id: I47d98c7d903b0028bd9969580ff0217aaf0cfb78\n"
    },
    {
      "commit": "d8c0293a33ba117decafd8fd17a33d9a254842bc",
      "tree": "48aa05e080d82c1041cdd8237877041d120bd02c",
      "parents": [
        "3c9db52fd70a6697de7b58fc353fe8348d822845"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 08 12:31:01 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 08 12:32:27 2019 -0700"
      },
      "message": "Stack: Add ability to override symbols dir\n\nAdd --syms option to set the symbols directory used for lookup.\n\nTest: m\nTest: manual\nChange-Id: Ibe0c93c68cafe017341e54e8f14ea9d775ae13bd\n"
    },
    {
      "commit": "3c9db52fd70a6697de7b58fc353fe8348d822845",
      "tree": "a03df39dd8e1d50691b519fa09848e1fcb3d8a35",
      "parents": [
        "bb5786437037dfffae103c41da2a482c62cf405b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 08 12:04:40 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 08 12:32:01 2019 -0700"
      },
      "message": "Stack: Replace getopt with argparse\n\nModernize and make it easier to add new options.\n\nTest: m\nTest: manual\nChange-Id: Ib7b1de4626e6b2cd27dca1dd911c594db93cb292\n"
    },
    {
      "commit": "931cd0b237f3d10370c8f59dee473a3fb48dd8dc",
      "tree": "6159e71f225e24d93696a840ab7a6c867056b379",
      "parents": [
        "fd08ad980e8b4c7828fc335950101c4949e4686a"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Tue Mar 26 13:57:32 2019 -0700"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Tue Mar 26 20:58:21 2019 +0000"
      },
      "message": "Fix gdbserver path in gdbclient.py\n\ngdbserver is moved in aosp/932459\n\nTest: run gdbclient.py\nChange-Id: Ia8cedfc994556bc1019649d15c91a505bdbf6dff\n"
    },
    {
      "commit": "ac90d1da7efb1264ab469f4ebb394c8772c2bcd1",
      "tree": "9ed21a65a1cb25023916866b8e0d74c2bb683def",
      "parents": [
        "104232e0fca3a54686a8fdc59c5261de90e57573"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 15 12:21:57 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 15 12:21:57 2019 -0700"
      },
      "message": "Really fix support for soname in apk.\n\nBug: 29218999\n\nTest: Run a stack through vendor/google/tools/stack --auto with this change.\nChange-Id: I0d650f30d37bb0dfa9db011d7624c0c74a98f2df\n"
    },
    {
      "commit": "55a9699db337d719ecaeb9c22311c065ee49d19b",
      "tree": "f66bab9ce8d0489e7eb3fd442bf741c5e83c5627",
      "parents": [
        "de419999a77b5ff4544214679513bc464829b351"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 13 15:37:31 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 13 17:08:40 2019 -0700"
      },
      "message": "Add support for soname display in apk.\n\nBug: 29218999\n\nTest: Verified unwind through an apk works with both formats.\nChange-Id: I20dba918e94024902968ab320dc03e1e343d8a31\n"
    },
    {
      "commit": "f91fb912d3f5dce25c4df76503435dd275016a00",
      "tree": "2a53491c1df24c2b7b02e259001337e605465b86",
      "parents": [
        "7da7f8870ab89635d312b4e9f4fae0220f544a46",
        "63bf1087ebb06b59e3d82cbc5ccd4485704c6b91"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Feb 23 02:12:39 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Feb 23 02:12:39 2019 +0000"
      },
      "message": "Merge \"gdbclient.py: Add --env flag.\""
    },
    {
      "commit": "92476657e3fda2bc2b8f52e438c6fd4c698016c2",
      "tree": "c6b97fdb6c8ac99047629a367df25eb13a1bdb2a",
      "parents": [
        "9ed4f798d1a7b0c5439c9a2bfcf5a6a89256d9cd"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 17 11:18:48 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jan 18 11:03:03 2019 -0800"
      },
      "message": "gdbclient.py alternative frontend support\n\nThis adds a new --setup-forwarding {gdb|vscode} flag that will make\ngdbclient.py (1) setup the port forwarding needed to connect to a\nremote process and (2) print the commands/configuration needed to use\nthe frontend of your choice to run the debugger. Currently it supports\ngdb and visual-studio code. In order to avoid using up all the ports\nthe gdbclient.py program will not exit until directed by user input,\nholding the ports open until this occurs.\n\nTo use:\n\n```\n% ./development/scripts/gdbclient.py -n com.android.contacts --setup-forwarding vscode\nRedirecting gdbserver output to /tmp/gdbclient.log\n\n{\n    \"miDebuggerPath\": \"/fast-2/allight/aosp/prebuilts/gdb/linux-x86/bin/gdb\",\n    \"program\": \"/fast-2/allight/aosp/out/target/product/walleye/symbols/system/bin/app_process64\",\n    \"setupCommands\": [\n        {\n            \"text\": \"-enable-pretty-printing\",\n            \"description\": \"Enable pretty-printing for gdb\",\n            \"ignoreFailures\": true\n        },\n        {\n            \"text\": \"-environment-directory /fast-2/allight/aosp\",\n            \"description\": \"gdb command: dir\",\n            \"ignoreFailures\": false\n        },\n        {\n            \"text\": \"-gdb-set solib-search-path /fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/hw:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/ssl/engines:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/drm:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/egl:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/soundfx:/fast-2/allight/aosp/out/target/product/walleye/symbols/vendor/lib64/:/fast-2/allight/aosp/out/target/product/walleye/symbols/vendor/lib64/hw:/fast-2/allight/aosp/out/target/product/walleye/symbols/vendor/lib64/egl\",\n            \"description\": \"gdb command: set solib-search-path\",\n            \"ignoreFailures\": false\n        },\n        {\n            \"text\": \"-gdb-set solib-absolute-prefix /fast-2/allight/aosp/out/target/product/walleye/symbols\",\n            \"description\": \"gdb command: set solib-absolute-prefix\",\n            \"ignoreFailures\": false\n        },\n        {\n            \"text\": \"-interpreter-exec console \\\"source /fast-2/allight/aosp/development/scripts/gdb/dalvik.gdb\\\"\",\n            \"description\": \"gdb command: source art commands\",\n            \"ignoreFailures\": false\n        }\n    ],\n    \"name\": \"(gdbclient.py) Attach app_process64 (port: 5039)\",\n    \"miDebuggerServerAddress\": \"localhost:5039\",\n    \"request\": \"launch\",\n    \"type\": \"cppdbg\",\n    \"cwd\": \"/fast-2/allight/aosp\",\n    \"MIMode\": \"gdb\"\n}\n\nPaste the above json into .vscode/launch.json and start the debugger as\nnormal. Press enter in this terminal once debugging is finished to shutdown\nthe gdbserver and close all the ports.\n\nPress enter to shutdown gdbserver\n```\n\nOr for gdb:\n\n```\n% ./development/scripts/gdbclient.py -n com.android.contacts --setup-forwarding gdb\nRedirecting gdbserver output to /tmp/gdbclient.log\n\nfile \u0027/fast-2/allight/aosp/out/target/product/walleye/symbols/system/bin/app_process64\u0027\ndirectory \u0027/fast-2/allight/aosp\u0027\nset solib-absolute-prefix /fast-2/allight/aosp/out/target/product/walleye/symbols\nset solib-search-path /fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/hw:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/ssl/engines:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/drm:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/egl:/fast-2/allight/aosp/out/target/product/walleye/symbols/system/lib64/soundfx:/fast-2/allight/aosp/out/target/product/walleye/symbols/vendor/lib64/:/fast-2/allight/aosp/out/target/product/walleye/symbols/vendor/lib64/hw:/fast-2/allight/aosp/out/target/product/walleye/symbols/vendor/lib64/egl\nsource /fast-2/allight/aosp/development/scripts/gdb/dalvik.gdb\n\npython\n\ndef target_remote_with_retry(target, timeout_seconds):\n  import time\n  end_time \u003d time.time() + timeout_seconds\n  while True:\n    try:\n      gdb.execute(\"target extended-remote \" + target)\n      return True\n    except gdb.error as e:\n      time_left \u003d end_time - time.time()\n      if time_left \u003c 0 or time_left \u003e timeout_seconds:\n        print(\"Error: unable to connect to device.\")\n        print(e)\n        return False\n      time.sleep(min(0.25, time_left))\n\ntarget_remote_with_retry(\u0027:5039\u0027, 5)\n\nend\n\nPaste the above gdb commands into the gdb frontend to setup the gdbserver\nconnection. Press enter in this terminal once debugging is finished to\nshutdown the gdbserver and close all the ports.\n\nPress enter to shutdown gdbserver\n```\n\nTest: ./development/scripts/gdbclient.py -n com.android.contacts --setup-forwarding vscode\n      Perform debugging.\n\nChange-Id: Ifa105cfbb100c4ba872b85c1c609d49a4f194d8b\n"
    },
    {
      "commit": "63bf1087ebb06b59e3d82cbc5ccd4485704c6b91",
      "tree": "10ee573cecb821d255248250ff0bc83e666671fe",
      "parents": [
        "a87126ad77c8239b3afb2e5e1fca0593c0ef5ee3"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Wed Dec 19 20:51:42 2018 -0800"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Wed Dec 19 20:52:38 2018 -0800"
      },
      "message": "gdbclient.py: Add --env flag.\n\nThis flag allows users to set environment variables when running\na binary.\n\nChange-Id: I01e2729c372da2e231bda86accc805495dcfdc06\n"
    },
    {
      "commit": "e547eb3c9b5274cab561867bb7e6127b2fe686cd",
      "tree": "4254d6d8d44fd38d4c74ab170565fd7e4a54661f",
      "parents": [
        "3ee240c6c3b8146549ea465e54b4a4bbc3053544"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 29 18:31:37 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 30 11:03:17 2018 -0700"
      },
      "message": "Symbol: Add presubmit testing\n\nAdd symbol\u0027s unit tests to presubmit.\n\nTest: atest python-symbol_test\nChange-Id: I37eb4151365507ab2a95d7789408504cca78153c\n"
    },
    {
      "commit": "3ee240c6c3b8146549ea465e54b4a4bbc3053544",
      "tree": "500a301700e01bf8dca47d7248f026688fdb5b35",
      "parents": [
        "547631e12ad2207534e88abf4511bbcb5a0bbcc0"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 29 18:30:20 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 30 11:03:17 2018 -0700"
      },
      "message": "NativeHeapDumpViewer: Add tests to presubmit\n\nAdd native_heapdump_viewer_tests to presubmit.\n\nTest: atest python-native_heapdump_viewer_test\nChange-Id: If40a376d160e774ef357d9ba2a86b40f6f7d05f0\n"
    },
    {
      "commit": "547631e12ad2207534e88abf4511bbcb5a0bbcc0",
      "tree": "9c44d4404b024a61db455b36b00f2c0a48ef538e",
      "parents": [
        "9240b454cc4712bdb52ed82004dc1f25446b33b6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 29 13:25:49 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 30 11:03:17 2018 -0700"
      },
      "message": "NativeHeapDumpViewer: Python 3 compatibility\n\nFix some minor compat issues. Also clean up file close.\n\nTest: native_heapdump_viewer_tests\nChange-Id: Ic43b5cc61f26dd11fffe4e9b7a06056e4ed1c676\n"
    },
    {
      "commit": "9240b454cc4712bdb52ed82004dc1f25446b33b6",
      "tree": "d517f31985985a480471901ab073294fa12025d4",
      "parents": [
        "51af54dea47c295358a05bf0d637764a73ab41df"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 26 14:17:30 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 30 11:03:17 2018 -0700"
      },
      "message": "Symbol: Python 3 compatibility\n\nFix some minor issues.\n\nTest: symbol test\nChange-Id: Iaa9f304c079abfc26212de8213fba38f4e311ec1\n"
    },
    {
      "commit": "076bd27d03f5557b1fbd2bfb21e5384d4cf8b0aa",
      "tree": "5d098929bf6c50a7bdbb478ca12d4fb7b62e0824",
      "parents": [
        "c5e05f9d7b1c5ca1f9214daeff5dc97e668c0dad",
        "7e73f7a7b43bc2548909feecdcb8671502fc8f54"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 09 17:04:08 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 09 17:04:08 2018 +0000"
      },
      "message": "Merge \"Prevent \"index out of range\" crash when addr2line aborts in between\""
    },
    {
      "commit": "7e73f7a7b43bc2548909feecdcb8671502fc8f54",
      "tree": "560b8e3ce1d2f36674a9ff0f8daa9800e06342cd",
      "parents": [
        "10fc92d2763967e3fa0ced4c9a5337a3225ad230"
      ],
      "author": {
        "name": "Shibin George",
        "email": "shibing@codeaurora.org",
        "time": "Fri Oct 05 18:02:54 2018 +0530"
      },
      "committer": {
        "name": "Shibin George",
        "email": "shibing@codeaurora.org",
        "time": "Tue Oct 09 06:21:03 2018 +0530"
      },
      "message": "Prevent \"index out of range\" crash when addr2line aborts in between\n\naddr2line may abort and \"result\" may be incomplete. This leads to\n\"index out of range\" exceptions. Enclose this in a try \u0026 except block\nand on exception, default to function:location \u003d ---:---\n\nTest: \"python native_heapdump_viewer_tests.py\" (after CL:780974)\n      passes.\n\nBUG: 117306194\n\nChange-Id: I4fd5c784949f279550aec95b68045df4a671da74\n"
    },
    {
      "commit": "b971e043f776eb43b3d06ffae74cd466ccd569ed",
      "tree": "eb762d5b64893b8ad41407ad3afa7804788af2bd",
      "parents": [
        "10fc92d2763967e3fa0ced4c9a5337a3225ad230"
      ],
      "author": {
        "name": "Shibin George",
        "email": "shibing@codeaurora.org",
        "time": "Sat Oct 06 09:17:17 2018 +0530"
      },
      "committer": {
        "name": "Shibin George",
        "email": "shibing@codeaurora.org",
        "time": "Sat Oct 06 03:54:13 2018 +0000"
      },
      "message": "native_heapdump_viewer_tests: update ParseNativeHeap() to pass 4 arguments\n\nfca3084 introduced an additional argument to ParseNativeHeap().\nThis CL updates the test to reflect the same.\n\nTest: \"python native_heapdump_viewer_tests.py\" executes without\n      any errors.\n\nChange-Id: I6c196205ead2cb6abd4a646a3ac53e62ae3e5038\n"
    },
    {
      "commit": "ec9ee7f412924b8ac7fad92299ec2a94189a0f01",
      "tree": "4747a95753afea55512ff4e85cdde9fc1890337a",
      "parents": [
        "8b46ef302a9efd309ee3bf45645ddb7ce3b43974"
      ],
      "author": {
        "name": "Joel Fernandes",
        "email": "joelaf@google.com",
        "time": "Fri Aug 24 12:37:52 2018 -0700"
      },
      "committer": {
        "name": "Joel Fernandes",
        "email": "joelaf@google.com",
        "time": "Fri Aug 24 12:37:52 2018 -0700"
      },
      "message": "Remove ashmem from development repository\n\nThis topic removes ashmem from ART. Changes the names in development/\ntoo. It only affects \"dalvik-\" ashmem regions which are the majority.\n\nChange-Id: I1186eb60087384847892f655bec8174169ffd6c4\nSigned-off-by: Joel Fernandes \u003cjoelaf@google.com\u003e\n"
    },
    {
      "commit": "6fc7aefbba7eb5f266025c3bd97084011a77ae9a",
      "tree": "3ea08709c871ae62facb25b18bfdcc4248c8c8a3",
      "parents": [
        "c8e3f1d45b0398da06443cf22beecee49d9ff8e4"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Aug 09 12:40:05 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Aug 10 12:17:51 2018 -0700"
      },
      "message": "Handle IOExceptions if addr2line fails.\n\nBug: 112357697\n\nTest: Verified that this doesn\u0027t cause any issues with a stack.\nTest: Faked an exception and verified no crash.\nChange-Id: I61982dbd44ac4f52b008bc35bbff2d9687f6ae25\n"
    },
    {
      "commit": "9e068aa334049265208e2439a1146edb347bcf50",
      "tree": "b037f71b116e9f19cd3179a0e65c9aea225fc9ef",
      "parents": [
        "9b82bd1bcf08aafd9ea97610ad254c87d9612729",
        "0d2f6425edd3d97e10f4e9ba0ce0be9907d2a8fd"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 03 16:34:36 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Aug 03 16:34:36 2018 -0700"
      },
      "message": "Merge \"Fix GetMappingFromOffset\"\nam: 0d2f6425ed\n\nChange-Id: Ib743d58a691dbbe517f7cb4cf3ce37f7ce70000d\n"
    },
    {
      "commit": "e3503620cd37970ff65258c7035253934c0e262f",
      "tree": "a9263582924a4c43f0bccc3144374873ab9ae4d7",
      "parents": [
        "fddbb8c61a60fe7de79e4e089925da50c2a332a4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 03 13:20:14 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 03 13:26:10 2018 -0700"
      },
      "message": "Fix GetMappingFromOffset\n\nFixed backward calculation of mapping offset.\n\nAdded logic to page align the data offset for uncompressed shared\nobjects. This fixes symbolization.\n\nBug: 111268230\nTest: inspect native heap dump for the Camera app\nChange-Id: If1af41e7265f017c1a691008309c8a002d5f588e\n"
    },
    {
      "commit": "79a4d778f6672d5e99be39bf02f0dbc3cfae87a2",
      "tree": "d35ba15b4ad861c4a73c6d46edd01971f32c3cfd",
      "parents": [
        "d4447a131eae46055b056b271917f1f6d3fef71b",
        "a70bf347f7934cfb27fd58d37fb67ac1733f2e1c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 31 16:36:07 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 31 16:36:07 2018 -0700"
      },
      "message": "Merge \"Add logic for replacing maps for zip files\"\nam: a70bf347f7\n\nChange-Id: Icad4d96f4e083e472b59702e8b801d0e0eb4c1ff\n"
    },
    {
      "commit": "fca30841f39a9c3b3aeff25bdef588877f5e096b",
      "tree": "4ee992d7134205da5d55a15c5d1c4183d80aecd6",
      "parents": [
        "a56dfaf4defde5122275c2a78760fc821ddce37f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 19 17:00:36 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 31 14:24:29 2018 -0700"
      },
      "message": "Add logic for replacing maps for zip files\n\nFor zip files, try to open the file in the current directory and\ninsert the files as mappings. This enables the script to pick up\nembedded .so files.\n\nAdded a check to look in current directory before the symbol dir.\n\nAdded --app-symbols option to specify the directory containing the\napp APK and so files.\n\nTest: manual\nBug: 111268230\n\n(cherry picked from commit b284c20247efa515eecaf81d2a05f9fb44750db5)\n\nMerged-In: Id1b1f13bac78911daa6a72c35ebfadfdc9c1700f\nChange-Id: Ia8d3dd64f16e1d06d929b4023292cb98a438ea3e\n"
    },
    {
      "commit": "3140c7e495d5237f5d3d87ad2eb7789ec9af895f",
      "tree": "4daeca3de4592d559dade4102a05d5590bbfe304",
      "parents": [
        "b0ed71b31856b4261c5e31107d69a28efbba837e",
        "3aa9457410578a271b475c30a7cbd12f2651d260"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 23 19:00:14 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jul 23 19:00:14 2018 -0700"
      },
      "message": "Merge \"pid: switch to pgrep.\"\nam: 3aa9457410\n\nChange-Id: Ie2cbb889773651c922095a7fa7ae983c8431b1d8\n"
    },
    {
      "commit": "f080bf1f7659c70f9208003fbbefc165d2fe46b8",
      "tree": "f74de5f5c399d8753636dc59600a990158e86573",
      "parents": [
        "cd2f1cfed262371368e7b686c8d3a7cf41cba991"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 23 17:01:42 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 23 17:01:42 2018 -0700"
      },
      "message": "pid: switch to pgrep.\n\nFix a bug where processes that didn\u0027t have a leading space from right\njustification of the pid column would return the process name instead\nof the pid, by switching to pgrep.\n\nBug: http://b/111748205\nTest: manual\nChange-Id: I3493474540ccfa89f5bb3e66153d9e96ec8bf1d9\n"
    },
    {
      "commit": "9669de4c9e91daa997a023e5fbc611c6c4f7efcc",
      "tree": "d7fcb55c7682718ca979363b5d7034d84b90c1ac",
      "parents": [
        "5e1ab1043a8b56496acfcbfdbe60299e4e6fe6d4",
        "cd2f1cfed262371368e7b686c8d3a7cf41cba991"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jul 16 14:28:04 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jul 16 14:28:04 2018 -0700"
      },
      "message": "Merge \"Refactor native heap viewer to add tests.\"\nam: cd2f1cfed2\n\nChange-Id: I6580a7d9624f27647f727889efb88f6e24ee0075\n"
    },
    {
      "commit": "dfb5368b576dbf3a5ffbb3807eed1fa031c5da2c",
      "tree": "ca0cca2a76f281c601c6fa62bdcfe18a3fc74ca0",
      "parents": [
        "1ae3edd54b56abd933147e88abca3337abff5a62"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jul 11 15:15:35 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 13 14:09:43 2018 -0700"
      },
      "message": "Refactor native heap viewer to add tests.\n\nThis only includes a few tests to start with.\n\nBug: 62492960\n\nTest: Ran new unit tests.\nTest: Ran with all different options and verified it produces the same\nTest: output as the previous script.\nChange-Id: Iad29a5f04f49986139c92030a3259cae512859af\n"
    },
    {
      "commit": "81052a3c858f25a9f25a66a4cfb783bcc918bd73",
      "tree": "e78490bbd2fcfa9b5c74c22a7d03ea912e26e757",
      "parents": [
        "0ab65b31823061009dc071dcb9bb9b4dc17c9e75",
        "1ae3edd54b56abd933147e88abca3337abff5a62"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 10 14:22:07 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 10 14:22:07 2018 -0700"
      },
      "message": "Merge \"Detect if num field is valid on v1.0 version.\"\nam: 1ae3edd54b\n\nChange-Id: Ie14c18b08b3c8f9079c44645fe1ddb533e439d7b\n"
    },
    {
      "commit": "ad7d5fb378eca464dbf33c5267c5e91b735bb16c",
      "tree": "4e1be15cfc6822de1e874502f9896cb427a60cf3",
      "parents": [
        "532d1aa70f8c4f70460f9a3d97fa7e6ccad035b7"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jul 09 14:48:15 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 10 12:25:33 2018 -0700"
      },
      "message": "Detect if num field is valid on v1.0 version.\n\nIn Android P, the version field did not get incremented properly in\nall places. So if a file with a v1.0 version is found, do a further check\nto verify if the num field is really valid.\n\nTest: Verified that a file with v1.0 gets checked and the valid num field\nTest: is set correctly.\nTest: Verified that a file with v1.1 automatically gets num field set to\nTest: valid.\nChange-Id: I7f828294c833e334cad76a866bbaa1d78ac02cfb\nMerged-In: I7f828294c833e334cad76a866bbaa1d78ac02cfb\n(cherry picked from commit b558fe4d53cf641f68c2086b3847690c56e0f9cf)\n"
    },
    {
      "commit": "590650db07465d658bc8a1b08d02a7dbb10f7cdd",
      "tree": "fe29fb0cf767bc3110a68abd403ddeda5c985188",
      "parents": [
        "62d0ddb8192f32bde384d8a11a77a6e15e2ab600",
        "2e4640f4688d948b813b627a4188ffce06ddc03a"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jun 26 13:22:50 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 26 13:22:50 2018 -0700"
      },
      "message": "Merge \"Allow restart in gdbclient.\"\nam: 2e4640f468\n\nChange-Id: I8440c29f0432284a925afa0d6d5748c49bdd4296\n"
    },
    {
      "commit": "d124bc7562a5c4dcf71c9faf502e555f61daff72",
      "tree": "d65bd69a3a952f209f083a105a718c029d2f5afa",
      "parents": [
        "50fb8c30299aacaa74076e6879fd689843ec90a1"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jun 26 11:15:16 2018 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jun 26 11:15:16 2018 -0700"
      },
      "message": "Allow restart in gdbclient.\n\nSwitching from remote to extended-remote allows the program being\ndebugged to be restarted like a normal non-remote program.\n\nTest: Used gdbclient debugging ICU things for a while, restarted often\nBug: None\nChange-Id: Ia295749b9aa86727479d760d7c743f98a06fa6d4\n"
    },
    {
      "commit": "121c8d9024f24900bdf920335daf4f723917a140",
      "tree": "7bb484913a9ccff3262bb4b16125cb98da5ebb8a",
      "parents": [
        "3502ceecff41618042b8bfd12baff6d49c5a1ae6",
        "759a6f75ff8778a758c54fe224f6a767fa8c6b47"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 15 08:52:34 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jun 15 08:52:34 2018 -0700"
      },
      "message": "Merge changes from topic \"stacks_envsetup\"\nam: 759a6f75ff\n\nChange-Id: I42facf6b00b039e37d62706bde4498117e90ec3f\n"
    },
    {
      "commit": "3502ceecff41618042b8bfd12baff6d49c5a1ae6",
      "tree": "88d01b8403639425daf073d230525f3d82ca5333",
      "parents": [
        "aa32b1aaa97023c321b2ba801f4840d8445db0d6",
        "4df6279c711f276bba5d53001e10d82515942b52"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 15 08:51:58 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jun 15 08:51:58 2018 -0700"
      },
      "message": "Add return code support to `pid`.\nam: 4df6279c71\n\nChange-Id: Ic853345ab244c6848349a99ec732f3b6c9ef87d8\n"
    },
    {
      "commit": "aa32b1aaa97023c321b2ba801f4840d8445db0d6",
      "tree": "344d16ccbf99d44e792a2481348c4128bfd70169",
      "parents": [
        "a5a9763fdbc2ce2054dcf8115e3df8a4c1c00769",
        "3dffb8438dc0351714d272a44f43c9e5534e1c1a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 15 08:51:21 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jun 15 08:51:21 2018 -0700"
      },
      "message": "Move pid, stacks from envsetup.sh to dedicated scripts.\nam: 3dffb8438d\n\nChange-Id: I10024d4978f276286cc6e0e92722c5fc7e62c678\n"
    },
    {
      "commit": "759a6f75ff8778a758c54fe224f6a767fa8c6b47",
      "tree": "3c9c57d7041fd9a708aa46f8e7b6c5bb84c627b9",
      "parents": [
        "9a2f49a71a6b5eedea2b9b261e20757c16dad896",
        "91ba53c4b912de32af338431a5584ad209a72f0f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 15 15:43:37 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 15 15:43:37 2018 +0000"
      },
      "message": "Merge changes from topic \"stacks_envsetup\"\n\n* changes:\n  stacks: match exactly before matching nonexactly.\n  Add return code support to `pid`.\n  Move pid, stacks from envsetup.sh to dedicated scripts.\n"
    },
    {
      "commit": "4df6279c711f276bba5d53001e10d82515942b52",
      "tree": "5adb8be169edab124a0bf6bcbaba856d975ac571",
      "parents": [
        "3dffb8438dc0351714d272a44f43c9e5534e1c1a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 14 16:32:12 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 14 16:36:12 2018 -0700"
      },
      "message": "Add return code support to `pid`.\n\nTest: pid nonexistent; echo $?\nTest: pid --exact nonexistent; echo $?\nChange-Id: If8efb1ca27ae3ed7b5be1c51179fae387c56e305\n"
    },
    {
      "commit": "3dffb8438dc0351714d272a44f43c9e5534e1c1a",
      "tree": "bf9a80fcea1456526291a2f70fb12edc06e1ac0f",
      "parents": [
        "ebd456790255a864b5ff49dabc68760fc09e509f"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 14 16:12:12 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 14 16:36:12 2018 -0700"
      },
      "message": "Move pid, stacks from envsetup.sh to dedicated scripts.\n\nMake it so that these can be used in other scripts by moving them from\nfunctions defined in envsetup.sh to standalone scripts.\n\nTest: stacks zygote64\nChange-Id: I55ba76b248c54d9193fb019b7f4aca2f4c3a05bd\n"
    },
    {
      "commit": "91ba53c4b912de32af338431a5584ad209a72f0f",
      "tree": "766527d211e46a3a151cd93fffc63491cd37e87a",
      "parents": [
        "4df6279c711f276bba5d53001e10d82515942b52"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 14 16:34:26 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 14 16:36:12 2018 -0700"
      },
      "message": "stacks: match exactly before matching nonexactly.\n\n`pid zygote` will match zygote64 as well, but someone using `stacks\nzygote` clearly wants the 32-bit version. Attempt an exact match before\nwe try a nonexact one.\n\nTest: stacks zygote\nTest: stacks zygote64\nChange-Id: I5fd75cdbe4982c7ea831749c9ba823a2451e5490\n"
    },
    {
      "commit": "a5a9763fdbc2ce2054dcf8115e3df8a4c1c00769",
      "tree": "7dec5304c13e3ba7d542beb12d79530d1ae0064b",
      "parents": [
        "49573916dcdb8ad16962b2610f2d7f062b90865e",
        "9a2f49a71a6b5eedea2b9b261e20757c16dad896"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 14 08:38:26 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jun 14 08:38:26 2018 -0700"
      },
      "message": "Merge \"Script: Fix disassemble_tombstone.py\"\nam: 9a2f49a71a\n\nChange-Id: I26497e24d245eb0c035b9807bab34c7873abde6b\n"
    },
    {
      "commit": "64676442d4a9cdd82841bac99f63b82da66f187d",
      "tree": "bde0cfeb93eac4ff01f351f246d4a40c6f97e8f8",
      "parents": [
        "ebd456790255a864b5ff49dabc68760fc09e509f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 13 14:32:54 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 13 14:32:54 2018 -0700"
      },
      "message": "Script: Fix disassemble_tombstone.py\n\nUpdate for newer debuggerd output marking the memory dump around\nthe currently executed code.\n\nAdd a hack for ARM assembly: override the assembler-emitted $d\nsymbol marking all our .byte data, so that objdump will disassemble\nas instructions.\n\nTest: manual\nChange-Id: I100ed9e0ce39c073d5885cc430d78c24fef38882\n"
    },
    {
      "commit": "7b021e8a83cd648acd081c246d9245ccdab08e11",
      "tree": "4517bfb5fce78dcde6ed489b8b98ad32cc877cbc",
      "parents": [
        "be61b70d09af2d54d535bbf2e8e20919f3a9bbcd",
        "fb5b466040c34a40f02959e4c216825527379b80"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jun 05 12:48:58 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 05 12:48:58 2018 -0700"
      },
      "message": "Merge \"Add descriptive text describing html interaction.\" am: fa6b514d71\nam: fb5b466040\n\nChange-Id: I80337ca8d8ab35994d7cb7afbb3f3c4ace8c8851\n"
    },
    {
      "commit": "fbd84e925520aa835536fed28b80c1f83f92301a",
      "tree": "3dbdb946b329b8b6cdec85783e0b7fa0aedec24a",
      "parents": [
        "4cb768402c660107c3ec89d2e779313f38d091f3"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jun 04 15:04:33 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jun 05 08:46:23 2018 -0700"
      },
      "message": "Add descriptive text describing html interaction.\n\nTest: Ran and verified html output is viewable.\nChange-Id: I54771bc9b536ff8fbc62dc7e5aac2caa22765e30\n"
    },
    {
      "commit": "ffc868ba1fa2f8a806e2856675111e0677a2b15a",
      "tree": "0211fe5061f19d2598baa5f81d605eb99185d271",
      "parents": [
        "b4a0edc4ea2928f33218ef03f9f5056c40803d86",
        "7b291a7108c19f082130d2022f39b1fa9add745a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 24 13:18:23 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 24 13:18:23 2018 -0700"
      },
      "message": "Merge \"Handle num fields that aren\u0027t one.\" am: 51fdbb627f\nam: 7b291a7108\n\nChange-Id: I3536bde51bbe798b23b3800d5ab890c60a9df553\n"
    },
    {
      "commit": "bede9f3b3c9f93464c80751a55668b333363ffb1",
      "tree": "6caa5addcb25d406cc3d9fe20f3f412de94120a9",
      "parents": [
        "f3abc723dc62c6818fec6bffa4fe2e0b9bdc1823"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 28 11:17:17 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue May 22 19:02:41 2018 -0700"
      },
      "message": "Handle num fields that aren\u0027t one.\n\nThe new version of malloc debug supports using a num field that is more\nthan one. Modify the parser to handle this case.\n\nBug: 74361929\n\nTest: Ran on a file that contained non-one numbers and verified the output.\nChange-Id: I158922e51ce99afff88f20a80df414d653f95e65\n"
    },
    {
      "commit": "07c15fd539575a1d86ca518241efb4754eed5cfd",
      "tree": "7ad4e3467c56b4a1313a21eef1530be035fede4f",
      "parents": [
        "4917750e89082495405f02446bd19fc40fca78df",
        "2f5dcfe651c64d31f72b6316a43a1d3ab0e86533"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 10 14:35:29 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 10 14:35:29 2018 -0700"
      },
      "message": "Merge \"Scripts: Export symbol.py\" am: 4c5c36987a\nam: 2f5dcfe651\n\nChange-Id: I358cb6e1e4bff27f4b3c0437bb313f9c491034e1\n"
    },
    {
      "commit": "5bec21433ead0c019d6336b86a2c96beda92364f",
      "tree": "6a9d4fd90cc392cbc624774cab2942aab641582c",
      "parents": [
        "87cc3e369cd0ba26193fc3ea7f65b3016c1c7862"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 09 15:11:06 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 09 15:11:06 2018 -0700"
      },
      "message": "Scripts: Export symbol.py\n\nExport symbol.py in a python host library called python-symbol.\n\nBug: 73175642\nTest: m\nChange-Id: I9503efd339b69f0655db6a3a5cf04a94dac72489\n"
    },
    {
      "commit": "0ffeba64ad18234482ef750fb79ff57519d73d55",
      "tree": "407eee2db4a0433a5f3335625e9c6a22305cb40c",
      "parents": [
        "cc5b7ebf121e4cabbe22253cd6ccac5fd9d7d716"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Mar 20 22:33:48 2018 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Mar 21 15:44:48 2018 -0700"
      },
      "message": "Add battery level test script.\n\nBug: 74120126\nTest: manual\nChange-Id: I1c05c873642ea4f61771e0c4ea44c70f6214d73b\n"
    },
    {
      "commit": "70b4c549341d7d69ceff42793d144e9c3f182616",
      "tree": "c95562ac4e6aac82ccfb6a132ec096d4b9cc35b6",
      "parents": [
        "3d6d5244db1198a4c13ab80d50c169d6d33e269b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 14 12:53:04 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 14 13:19:30 2017 -0800"
      },
      "message": "Add scripts OWNERS.\n\nBug: N/A\nTest: N/A\nChange-Id: I54cfaff7b8f94475692b62394e8da3d866308509\n"
    },
    {
      "commit": "d3fc8faff60084c146880fd24efb6c876cce559e",
      "tree": "2550b7efba23b5c68f104eef985999d165d164de",
      "parents": [
        "c1c3e5f1d807db22954a8f5f952b166cd922a7b0"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Oct 17 14:04:56 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Oct 17 14:10:51 2017 -0700"
      },
      "message": "Switch to new soong_ui dumpvar-mode\n\nStop using make directly.\n\nTest: manual tests\nTest: development/scripts/symbol.py\nChange-Id: I9f75776251b693dbe979989942d2db49768224d2\n"
    },
    {
      "commit": "bc82e81e21742b392753f6627ee02f7910b2cacb",
      "tree": "38929cc456f7bb46161328adcbd28b7c7dc6e217",
      "parents": [
        "09cbda1df21a3a2fc0b0497409ea62b8de5cbfc0",
        "c57aaaf57cd97f2a6515ef0d2726a0ff49868b7b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 09 21:33:11 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 09 21:33:11 2017 +0000"
      },
      "message": "Merge \"gdbclient.py: don\u0027t use make to dump target info.\"\nam: c57aaaf57c\n\nChange-Id: I15177dbcb47333fd2b9b8a713bc3a5a2c1991f09\n"
    },
    {
      "commit": "c57aaaf57cd97f2a6515ef0d2726a0ff49868b7b",
      "tree": "bcd652dc2612afdf4bb640ddd5898216e92521ac",
      "parents": [
        "a5e2c3e3d83faa64b1c15ff151a99ebf05a2a913",
        "466e289dc83e15a88304f7c1359471d741a3551d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Aug 09 21:18:04 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 09 21:18:04 2017 +0000"
      },
      "message": "Merge \"gdbclient.py: don\u0027t use make to dump target info.\""
    },
    {
      "commit": "8697036e17e881b30d52194654797a6893641cd1",
      "tree": "7f6e43cc3147db9b7ada1fbdbe6129c7cb0dfd5d",
      "parents": [
        "4703213cfbda2d2306ab218d23afb45d64892cf0",
        "d98a584a6d0d7c2a3ff3a3a2df4743d72601bfe0"
      ],
      "author": {
        "name": "Greg Hartman",
        "email": "ghartman@google.com",
        "time": "Fri Jul 21 02:04:08 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jul 21 02:04:08 2017 +0000"
      },
      "message": "Merge \"Provide a way to disassemble code in a tombstone.\"\nam: d98a584a6d\n\nChange-Id: Ia8c1ae3cb29bab9a147f5d05aa54d50e745eb96a\n"
    },
    {
      "commit": "a6e5520bce154df24e2c46b1c54abca894fb2fb3",
      "tree": "9490bbac32f0b66f397949f6ae8dd64d0ef8e39b",
      "parents": [
        "5d691e597a5cba6793eb601fcb50f6abaae9bff7"
      ],
      "author": {
        "name": "Greg Hartman",
        "email": "ghartman@google.com",
        "time": "Wed Mar 09 21:55:40 2016 -0800"
      },
      "committer": {
        "name": "Greg Hartman",
        "email": "ghartman@google.com",
        "time": "Thu Jul 20 16:57:51 2017 -0700"
      },
      "message": "Provide a way to disassemble code in a tombstone.\n\nTest: ran disassemble_test.py\n\nChange-Id: Id6beb23ff40d72b89b4d8400d645f7f868fd87d2\n"
    },
    {
      "commit": "466e289dc83e15a88304f7c1359471d741a3551d",
      "tree": "ad1fe11e389d9f847245b9f325ed97785ffdc8b5",
      "parents": [
        "f45395cec016c5737c9019dbf1cacef9247e3690"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 13 15:39:05 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 13 15:42:48 2017 -0700"
      },
      "message": "gdbclient.py: don\u0027t use make to dump target info.\n\nmake dumpvar takes forever (~0.45s per variable on my machine), and the\ninformation we want from it is already available in the environment.\nConstruct the paths we need ourselves, instead of relying on make to do\nit for us, shaving off about a second from a gdbclient.py invocation.\n\nTest: gdbclient.py -r ls\nChange-Id: I8c563da726c8f61a23e2eb701f2f272a4c71d713\n"
    },
    {
      "commit": "aef6b1d2465d7f5deaa6ddc5308b02aed253fdd1",
      "tree": "8a990a8b0b7df20e50a5579aed2b538f8691cf50",
      "parents": [
        "ebc811daac05ae83efb7db405c1d6df9b6caa599",
        "f45395cec016c5737c9019dbf1cacef9247e3690"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Jul 13 18:44:42 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jul 13 18:44:42 2017 +0000"
      },
      "message": "Merge \"Resolve gdbclient.py -r executable from target\"\nam: f45395cec0\n\nChange-Id: I7f38016c99f748f4641cedbbaa045a547db7f8f4\n"
    },
    {
      "commit": "258c89e9e4548cefd7750f122dbd691ad4f5ee63",
      "tree": "4ec813b4535aaba98083e12ba92582ccf7fb5b0d",
      "parents": [
        "36be17f0254054ccb6abce97598482cc4ec0a2d5"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Jul 12 18:21:29 2017 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Jul 12 18:48:16 2017 -0700"
      },
      "message": "Resolve gdbclient.py -r executable from target\n\ngdbclient.py -r allows to provide an executable to be run on the target.\nBefore this patch the absolute path of the executable had to be\nprovided. This was inconvenient as the user has to first look up for the\nexe on the target before debuging it.\n\nWith this patch, gdbclient.py will look for the executable on the\ntarget if an absolute path is not provided.\n\nTest: gdbserver -r ls\nChange-Id: I610fd0a57b034ba8864874eeb1f7345d4a7daad9\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "82a266c27b565026593925f712645da1ba819536",
      "tree": "5f7a82a324319ba749d2c835104cdcd0bafd1693",
      "parents": [
        "74a35e639043ad1b9d63c11510f3bea399c0937a",
        "37c32c31621339af71b62dbc7986358ed629083e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 30 23:29:09 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jun 30 23:29:09 2017 +0000"
      },
      "message": "Merge \"Fix gdbclient.py -p.\"\nam: 37c32c3162\n\nChange-Id: I051679423bdff53539c4455faa5d73fed2d4c0a8\n"
    },
    {
      "commit": "89e1ecf9a17ed0cb1749530769fc91d52d3bdcab",
      "tree": "c4b1111b42767408159a662a3c76c4ebfbb5a4de",
      "parents": [
        "513bf3c355b7786ad1ebc37fc26a46f8594c5e7a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 30 14:03:32 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 30 14:03:32 2017 -0700"
      },
      "message": "Fix gdbclient.py -p.\n\nBug: http://b/26413900\nTest: manually ran gdbserver on device, connected with -p\nChange-Id: If58b95e52167c38263e77fe85bea14e0d7401bf4\n"
    },
    {
      "commit": "cd0f76d7725e48f4efedcc6b0515348a72b026a6",
      "tree": "b5e455cd51b40813eecf558c719405b655910b76",
      "parents": [
        "e2033ebfceda85e656657f98884ba6b39655666a",
        "b23457b4beb27713760aeb63919a467c1a85ea10"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Thu Jun 22 17:19:03 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jun 22 17:19:03 2017 +0000"
      },
      "message": "Merge \"Warn that gdbclient is deprecated in favor of gdbclient.py\" am: 4a419534fe\nam: b23457b4be\n\nChange-Id: Ie7c06875fb8edd37c8a11c14a11bff63f3c28511\n"
    },
    {
      "commit": "75b24f1270a55fc876cb6ab977ee2eabf57b217c",
      "tree": "9bc76b2cf6924417bb6ad86ee1f8cc5fdee23c81",
      "parents": [
        "c5efdcc7463c3fef73f39a70fd137caaf6c05b81"
      ],
      "author": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Jun 21 18:49:50 2017 -0700"
      },
      "committer": {
        "name": "Kevin Rocard",
        "email": "krocard@google.com",
        "time": "Wed Jun 21 18:49:50 2017 -0700"
      },
      "message": "Warn that gdbclient is deprecated in favor of gdbclient.py\n\nUsers of gdbclient might not know that a new and improved version exist\nin the form of gdbclient.py.\n\nChange-Id: I65243a8d25a1ecbe8ff734d0be4dbe40b50db4b2\nSigned-off-by: Kevin Rocard \u003ckrocard@google.com\u003e\n"
    },
    {
      "commit": "acf1fb1c63f2639dc0796fb8e3aa386fef7b403e",
      "tree": "e66eaa187cb45b611473bc3e289d59d76e8814a4",
      "parents": [
        "3f9596c38429a639d3454d6b1926239a626794da",
        "41e721028a325aed6e68dff73eef6b4f5e513d19"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 13 20:06:45 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 13 20:06:45 2017 +0000"
      },
      "message": "Merge \"Fix potential divide by zero in display_html\" am: 524311b26d\nam: 41e721028a\n\nChange-Id: Iac24401f1c8370f80824b56d63dffebd36081f13\n"
    },
    {
      "commit": "9ae5ff48955e182b3a4800897de14af4390b608c",
      "tree": "e1c0b4b00e278b32aa81f220cc573178f328f22d",
      "parents": [
        "9a882a68a15df45cc6e6cfeb7a9919c7381865d7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 13 10:55:48 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 13 11:00:26 2017 -0700"
      },
      "message": "Fix potential divide by zero in display_html\n\nWhen using logwrapper, there is only a zygote heap. This caused\na divide by zero for the app heap.\n\nTest: native_heapdump_viewer.py --html art/native_heap.txt \u003e test.html\n\nChange-Id: I7defd94935d72ee9c4cb6e53d7a1a308a1030eb3\n"
    },
    {
      "commit": "14a8c9175b7276fc47107a1e2d8a593b586a7756",
      "tree": "77e28553ccc51c6c70e868b221c5d0d9cd3acf6d",
      "parents": [
        "19a111ce1ba5a0624eb7598e1437a6d5e52aac8f",
        "464215894059fe9cd792bda8427f5ded9929d72d"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 09 22:24:29 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jun 09 22:24:29 2017 +0000"
      },
      "message": "Merge \"Fix potential divide by zero.\" am: 8d3f61724d\nam: 4642158940\n\nChange-Id: Ie3fe2c70a0cc3713cb47c78a10c020e29c42e42f\n"
    },
    {
      "commit": "8d3f61724d06ae860caa5ef156a2ea28353c212a",
      "tree": "129996493c621cdbd7ad6299ec4e8581a40a2565",
      "parents": [
        "06d5da59ac26a5248fdaae8a31c598666a6b57fe",
        "f427655e47f83757c8ca1c5a470a36407594be89"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 09 22:12:20 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 09 22:12:22 2017 +0000"
      },
      "message": "Merge \"Fix potential divide by zero.\""
    },
    {
      "commit": "c739b9e7111ff14783b30f138d24dd0b4416a198",
      "tree": "b8298a7f608f946273d3fd8b80014db317697470",
      "parents": [
        "c72d920d6ca8be6019e27a09df384016ec1ca431",
        "8c19ebd28dff2580b82583954f4e379442fea1b3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Jun 03 01:43:58 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Jun 03 01:43:58 2017 +0000"
      },
      "message": "Merge \"Move away from device.get_props.\" am: 904e475fbd am: 4d8dffffa6\nam: 8c19ebd28d\n\nChange-Id: I328be35af1e211412b105345b3d1ca78d24b7528\n"
    },
    {
      "commit": "1a2f12d23e68468afea4aecadbe4dcd105ec5353",
      "tree": "f05a8dfe9ac3f659f012c5627ec01999b757708f",
      "parents": [
        "ddd86bd21721f3ea945c211be5df9a40783d3066"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 02 13:15:59 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 02 13:15:59 2017 -0700"
      },
      "message": "Move away from device.get_props.\n\nProperties can include \\n so get_props isn\u0027t sound, and it\u0027s not obvious how\nto fix it (without adding something like cat\u0027s -v to getprop, which wouldn\u0027t\nhelp the intended use case of working with arbitrary old devices).\n\nBug: https://issuetracker.google.com/37093233\nTest: gdbclient -r /system/bin/date\nChange-Id: I96042fd44f1de17974968954fab6c916a9d13b61\n"
    },
    {
      "commit": "8ce1c18ba86ab990c1aaa3829745bc39f28ef35d",
      "tree": "fbd06c08a0b724657fa5a35c4d23e095fe260e87",
      "parents": [
        "90aedb165b099333f3341930f354c80ebf4250c4",
        "3aa3d5814efe0511c833cba5a1c7d563b9089b14"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 31 00:49:44 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 31 00:49:44 2017 +0000"
      },
      "message": "Merge \"gdbrunner: take a run-as/su command instead of a user.\" am: 3099f0c89d am: 83c5325987\nam: 3aa3d5814e\n\nChange-Id: Ib2538d9c996958228ceb6359994035789a507b02\n"
    },
    {
      "commit": "3099f0c89d5a9cbb8fdb4dddc3c0fe1934d46a63",
      "tree": "2ad268f17b9e6e7016810a4ada7e6503102ae7a6",
      "parents": [
        "1a5b9104fda7685b37c37e020e4f5625e68e628e",
        "057c2739fcf1d3f69c40e5d1f6b5791ac5e1c023"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 31 00:35:46 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 31 00:35:47 2017 +0000"
      },
      "message": "Merge \"gdbrunner: take a run-as/su command instead of a user.\""
    },
    {
      "commit": "057c2739fcf1d3f69c40e5d1f6b5791ac5e1c023",
      "tree": "00854ee2c762142035d8265e0fb4280bc87039e1",
      "parents": [
        "0a318e9244941e7f8b3fdd622eba2c458fe4a725"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 24 15:55:50 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 24 18:32:25 2017 -0700"
      },
      "message": "gdbrunner: take a run-as/su command instead of a user.\n\nSwitch from assuming that \"root\" meant su to an explicit prepended\nargument, to allow things like `gdbclient.py --user shell`.\n\nTest: gdbclient.py --user shell -r /system/bin/ls\nChange-Id: I9d02eea7c6d79898ed8b13817e009630b0f9536a\n"
    },
    {
      "commit": "f427655e47f83757c8ca1c5a470a36407594be89",
      "tree": "b21496425b5a19401b60c9717c9c8b93e0be807b",
      "parents": [
        "be49ee652af75a7d33a6fccb76b9f19add913860"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 24 16:26:56 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 24 17:27:27 2017 -0700"
      },
      "message": "Fix potential divide by zero.\n\nIf there are no bytes attributable to APP, then you get a divide\nby zero. Modify the code to avoid doing a divide by zero.\n\nThis can happen when using logwrapper to enable malloc debug.\n\nTest: Ran on a heap that had no APP bytest.\nChange-Id: I48f0666a92b591e4537c493c56b136e517a36c25\n"
    },
    {
      "commit": "e81fe437e3a45854423c9318fb41648093f7f850",
      "tree": "889cb41e50871741e93b345b528a5a17e09cc75f",
      "parents": [
        "7a46682993c72d7458b7c264081d9c3e3848d041",
        "4838d5f12b6033844fc7710d8fc59fb8f97fd33c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 23 21:02:35 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue May 23 21:02:35 2017 +0000"
      },
      "message": "Merge \"Script to view native allocations prettily.\" am: ef15f7851f am: 17e01f282d\nam: 4838d5f12b\n\nChange-Id: I8eefe00e4806027a87f0bd0e06ebcdcd4add874a\n"
    },
    {
      "commit": "ef15f7851fcf718b7b314c55fe56aee0c0130be4",
      "tree": "b9c76b6f1c14918548316885baa63bebc831498d",
      "parents": [
        "69479d574755c0341c17b72459105cfa7c4fac1c",
        "a178732bcfdffb112317abba8cc58f6cccd786bc"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 23 20:34:05 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 23 20:34:07 2017 +0000"
      },
      "message": "Merge \"Script to view native allocations prettily.\""
    },
    {
      "commit": "a178732bcfdffb112317abba8cc58f6cccd786bc",
      "tree": "a8e92c6dbd00d5ee315e3223243aed71dd567d19",
      "parents": [
        "1da84f09d246821c48d9017d9dc6ee225271bc74"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed May 17 13:07:54 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 23 10:23:29 2017 -0700"
      },
      "message": "Script to view native allocations prettily.\n\nUsage:\n1. Collect a native heap dump from the device. For example:\n  $ adb shell stop\n  $ adb shell setprop libc.debug.malloc.program app_process\n  $ adb shell setprop libc.debug.malloc.options backtrace\u003d64\n  $ adb shell start\n  (launch and use app)\n  $ adb shell am dumpheap -n \u003cpid\u003e /data/local/tmp/native_heap.txt\n  $ adb pull /data/local/tmp/native_heap.txt\n\n2. Run the viewer:\n$ python native_heapdump_viewer.py [options] native_heap.txt\n  [--verbose]: verbose output\n  [--html]: html output\n  [--symbols SYMBOL_DIR]: SYMBOL_DIR is the directory containing the\n  .so files with symbols. Defaults to $ANDROID_PRODUCT_OUT/symbols\n\nThis outputs a file with lines of the form:\n5831776  29.09% 100.00%    10532     71b07bc0b0 /system/lib64/libandroid_runtime.so Typeface_createFromArray frameworks/base/core/jni/android/graphics/Typeface.cpp:68\n\n5831776 is the total number of bytes allocated at this stack frame, which\nis 29.09% of the total number of bytes allocated and 100.00% of the parent\nframe\u0027s bytes allocated. 10532 is the total number of allocations at this\nstack frame. 71b07bc0b0 is the address of the stack frame.\n\nFor generating interactive HTML output, use:\npython native_heapdump_viewer.py --html [options] native_heap.txt \u003e allocations.html\nThen open allocations.html in a browser. Clicking on nodes will\nexpand the tree.\n\nTest: Try script on an app following usage instructions.\n\nBug: 36457259\nChange-Id: I18dfe9a00fc1d3e82673dbfb4b5be3dc10480cec\n"
    },
    {
      "commit": "15dff040ca2abfa794d95c8997c44041b710cff3",
      "tree": "53942fc046e4eb72c9841f633472601790d6ad8d",
      "parents": [
        "696545964c84a780642b7f1e7badd77ebefb9b5d",
        "6500b6e163dd61c97f6edda9b31bb71d2de40f86"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 18 21:01:21 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 18 21:01:21 2017 +0000"
      },
      "message": "Merge \"Stack: Add subprocess caching\" am: a1b14a7357 am: db19bc4e39\nam: 6500b6e163\n\nChange-Id: If163fa03e2d9bec003e57a88fbac3cd45781c843\n"
    },
    {
      "commit": "46b00d66acf24808d1bf85de50fa9b124a7916e2",
      "tree": "aeed548845976ba6035c89c18099e18cb0906a3b",
      "parents": [
        "b60fce019dbcca643988ab38e1c86d28f9ce0e6b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 17 15:12:27 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 18 10:38:30 2017 -0700"
      },
      "message": "Stack: Add subprocess caching\n\nAdd subprocess caching to the stack tool. This caches open pipes for\ncommands, improving symbolization speed for (sets of) stack traces with\nduplicated libraries.\n\nBug: 38226236\nTest: m\nTest: manual tests\nChange-Id: Iadbd74255b9a40c86939be3a1b172275a0b34d54\n"
    },
    {
      "commit": "a031d64eb9b6d04183d2ea72db848606ab224f70",
      "tree": "1a5922be4eaf2caf60649ee92fc267d0c6c8936c",
      "parents": [
        "9f27ecf2faba970038fa3818fe722169565e1815",
        "eace70430e3e9c420e7922cfc06e72476e380bd6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 18 16:52:34 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 18 16:52:34 2017 +0000"
      },
      "message": "Merge \"Stack: Add symbol caching\" am: b60fce019d am: 698998afca\nam: eace70430e\n\nChange-Id: Ib567614af9ddff4e358a8661b55f5aed016ea754\n"
    },
    {
      "commit": "3d97a461241c040c87ddc69728e8e616e78319c6",
      "tree": "a4817f7d035d11b844a0eeea1139d81b44809768",
      "parents": [
        "1da84f09d246821c48d9017d9dc6ee225271bc74"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 17 14:16:45 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 17 15:14:07 2017 -0700"
      },
      "message": "Stack: Add symbol caching\n\nAdd symbol caching to the stack tool. This caches resolved symbols,\nimproving symbolization speed for (sets of) stack traces with duplicated\nsymbols.\n\nBug: 38226236\nTest: m\nTest: manual tests\nChange-Id: Ia579234ba1bf227b12af0c5af5fa3955d0eed4fe\n"
    },
    {
      "commit": "748f1a11ffa5ade7e919e5105e9d367a04360a29",
      "tree": "c14848cc3a8021e0c0ba1308cdca80d7db983b27",
      "parents": [
        "4fab536d32e2bd35bdd8d37d82fe19a49500aab8",
        "f86af51d2fa4b65fd5e1584eb16d53f7c1619856"
      ],
      "author": {
        "name": "Po-Chien Hsueh",
        "email": "pchsueh@google.com",
        "time": "Thu Feb 09 02:51:50 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 09 02:51:50 2017 +0000"
      },
      "message": "Merge \"Count framework usage of BOARD variables\""
    },
    {
      "commit": "f86af51d2fa4b65fd5e1584eb16d53f7c1619856",
      "tree": "1a52c2bebbfb001bd3d0aec73030fa642c434b68",
      "parents": [
        "960a620ad937b4ab53debcc9c2d6b08886ed9de3"
      ],
      "author": {
        "name": "Po-Chien Hsueh",
        "email": "pchsueh@google.com",
        "time": "Fri Jan 20 17:02:57 2017 +0800"
      },
      "committer": {
        "name": "Po-Chien Hsueh",
        "email": "pchsueh@google.com",
        "time": "Tue Feb 07 11:49:35 2017 +0800"
      },
      "message": "Count framework usage of BOARD variables\n\nThis script analyses variables defined in BoardConfig*.mk and used\nby framework modules.\n\nBug: 33122247\nTest: run the script and check output\nChange-Id: Ice533b4d59775eab1660214933393fb987786fdc\nSigned-off-by: Po-Chien Hsueh \u003cpchsueh@google.com\u003e\n"
    },
    {
      "commit": "e9549c1716aa87be8c83d019e9ace1bd10ff3835",
      "tree": "5ecc2a4b1968069f41a88f6083f6b450a37d02fd",
      "parents": [
        "b6c99b4cf059942f4c3e4a6a145f4d0a7542236a"
      ],
      "author": {
        "name": "Keith Mok",
        "email": "ek9852@gmail.com",
        "time": "Wed Jan 25 15:15:43 2017 -0800"
      },
      "committer": {
        "name": "Keith Mok",
        "email": "ek9852@gmail.com",
        "time": "Wed Jan 25 21:06:21 2017 -0800"
      },
      "message": "gdbclient: fix darwin sed problem\n\ndarwin does not takes \\t for sed as tab.\nUse [[:blank:]] instead\n\nChange-Id: Ic6c08ceacf3918eb0da52a200c03e035c77a88ee\n"
    },
    {
      "commit": "5f1b4f0d9eddb9ec457ba56cc23b94c7246b141f",
      "tree": "e0305e1a8bcca8309a97691aab388884fb273c54",
      "parents": [
        "cc3a31fbe6ace96e5230a219676a163fae2e3675"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 19 13:24:37 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 19 13:24:37 2016 -0700"
      },
      "message": "Skip adding value lines for accidental matches.\n\nIf the value_line regex matches, and the symbol file happens to exist\nas a directory, we\u0027d call addr2line and crash. Fix this so that calling\naddr2line on a directory doesn\u0027t happen.\n\nThere isn\u0027t an easy way to test this, but I added a single new unit test. The\nreal test was to use a tombstone file that used to crash, but no longer crashes.\n\nTest: Wrote new unit test, ran over a tombstone file that used to crash.\nChange-Id: I4331e3b032cee8d697d1b7f409638750c61971d6\n"
    },
    {
      "commit": "5b820ba6c9c2e7a4ff29b0b9cff8e6fc52310081",
      "tree": "bf94e8ae1450eeb52390ad7a8ccd7070a88a7beb",
      "parents": [
        "1dd320ea93698e38be2bae8f618b76334153cd8c"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Sep 06 14:07:29 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Sep 09 10:54:45 2016 -0700"
      },
      "message": "Handle asan lines when determing abi.\n\nChange-Id: I553bded15e76ecb1ffc7bc3eadcee198301e0a67\n"
    },
    {
      "commit": "784eace983a73e6ea94028d9499379d1b2b33f82",
      "tree": "5105ddbf782944221998e3dbef63fa7171ae7dab",
      "parents": [
        "c1ba3c3726373daf3524924e5239129a18426e75",
        "48068ac0b45459dd44cf8cf88306148619efdb3c"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jul 27 00:36:57 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 27 00:36:57 2016 +0000"
      },
      "message": "Merge \"Stack: Fix tool for long stacks\""
    },
    {
      "commit": "1127df9e6fd7017f03a353b4334510352799f7a6",
      "tree": "ab640749d61118f708caa8406463f52171bba976",
      "parents": [
        "92863bc8cb037002dc1e8d3d9baa4626dd09cc4a"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jul 26 10:15:01 2016 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jul 26 10:57:22 2016 -0700"
      },
      "message": "Stack: Fix libmemunreachable stack test\n\nManually count input stack trace lines that match the regexps instead of\nrelying on the output of addr2line.  Random changes to the libraries\nlisted in the test case could cause addr2line to land in an inlined\nfunction and print multiple lines for each input stack frame.\n\nTest: development/scripts/stack_core.py\nChange-Id: I87f45466df4e814ec59a4c5f7e201fd1f3ee8419\n"
    },
    {
      "commit": "48068ac0b45459dd44cf8cf88306148619efdb3c",
      "tree": "9ae83f6650d34346861028a73257bda7b0e5689e",
      "parents": [
        "92863bc8cb037002dc1e8d3d9baa4626dd09cc4a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 25 21:07:27 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 26 08:43:27 2016 -0700"
      },
      "message": "Stack: Fix tool for long stacks\n\nTo make the comparison meaningful, better compare integrals rather\nthan strings.\n\nTest: ./stack_core.py\nChange-Id: Ie24bea75d7c0bc57a1b7683b91e62fafead70341\n"
    },
    {
      "commit": "807ec0ec36a7cc47dc328d8bb12c4e427e98cd45",
      "tree": "527f27c45edebc4fdf73db3b317831479c873e19",
      "parents": [
        "59a4978c1cc5affbec43acf0d1785d50e871e7da"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Mar 04 17:29:01 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Jul 07 17:09:04 2016 -0700"
      },
      "message": "stack: support output from dumpsys meminfo --unreachable\n\nSupport unreachable memory reports in the form:\n\n Unreachable memory\n  4307 bytes in 61 unreachable allocations\n  ABI: \u0027arm64\u0027\n\n  112 bytes unreachable at 79352e38d0\n   and 1904 similar unreachable bytes in 17 allocations\n   first 32 bytes of contents:\n   79352e38d0: 30 9c 83 52 79 00 00 00 00 00 00 00 00 00 00 00 0..Ry...........\n   79352e38e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................\n          #00  pc 000000000006e218  /system/lib64/libc++.so (operator new(unsigned long)+36)\n          #01  pc 000000000009171c  /system/lib64/libhwui.so\n          #02  pc 0000000000093cc8  /system/lib64/libhwui.so (android::uirenderer::RecordingCanvas::drawText(unsigned short const*, float const*, int, SkPaint const\u0026, float, float, float, float, float, float, float)+300)\n          #03  pc 00000000000fbdd0  /system/lib64/libandroid_runtime.so (android::CanvasJNI::drawText(android::Canvas*, unsigned short const*, int, int, int, float, float, int, android::Paint const\u0026, android::TypefaceImpl*)+2120)\n\nTest: ./stack_core.py\nChange-Id: I8075f3390f08972e57ec71f84dfe60adac110eed\n"
    },
    {
      "commit": "6ae324144b240b922799c2aae3f0165971dc55cd",
      "tree": "e0b2b02ea4fe23344cee6c3dd5c53058f387eda7",
      "parents": [
        "a38abd88b11b7b0723cc7d58e3c13f8232cb648b"
      ],
      "author": {
        "name": "Than McIntosh",
        "email": "thanm@google.com",
        "time": "Thu Mar 31 15:23:55 2016 -0400"
      },
      "committer": {
        "name": "Than McIntosh",
        "email": "thanm@google.com",
        "time": "Tue Apr 12 14:25:27 2016 -0400"
      },
      "message": "Script to perform USB reset of Android device.\n\nGiven a serial number, applies correct ioctl()\nto reset the USB device with that serial number.\nUseful to avoid having to unplug/replug after\nflashall + wipe of device.\n\nChange-Id: I7402e1e53cabc19c423ef912a5dc7ade8221b08b\n"
    },
    {
      "commit": "abe22f46161224559078da804c00d2859221f325",
      "tree": "b882e808c60007c478ef939e8a18e17fb14eb697",
      "parents": [
        "782e50b099234cde4f18e32de9383eac906dc186"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 16 12:17:59 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 16 13:11:18 2016 -0700"
      },
      "message": "Fix how the script gets data from apks.\n\nThe previous code used unzip to get the offsets of the files in\nthe zip file. This was an estimate, and it turns out to be wrong\nin many cases. Replace that with zipinfo -v which gives the exact\noffset of the files in the zip.\n\nAlso update the tmp files so that they are in a dictionary of their\nown by apk, instead of embedded in the offset list.\n\nChange-Id: I8f5efd95f2d2e39e20cc0b6b6571b799be21ef32\n"
    },
    {
      "commit": "bf8a94023453f2f6df87b0fb84dc14f7b46814ce",
      "tree": "8a80c97baa120e8c2c400a1588728b7cb875d3c6",
      "parents": [
        "2f3ee5f0a5cf5ca51d5233bb0ce1470ba859599b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 11 15:50:46 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 15 16:25:19 2016 -0700"
      },
      "message": "Find abi before trying to decode the stack.\n\nThe CallStack function prints stacks to the log. Unfortunately, our\nstack script defaults to arm, so if the data is actually arm64, we\u0027ll\ndo nothing. Modify the script to parse the input trying to determine\nthe abi before processing the rest of the lines. At the very least,\nwe\u0027ll be able to correctly choose between arm and arm64.\n\nThe only downside, is that, the old method could take dumps from different\nabis, but no one I know does this.\n\nBug: 26569638\nChange-Id: I5935b82fe0af1e788b0d3edc535b9f0cbb7d1b28\n"
    },
    {
      "commit": "7c776a4fb31cf38596e701fadf424abb5f37364d",
      "tree": "7d5be496858db411406e406f162ca5f0c48ede71",
      "parents": [
        "c67f5d05398f97fdce6649ef4720fd639a53c9b2",
        "35dd4d66b63c2bcec936fde8f1cdd064f53e0c98"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 07 18:05:26 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 07 18:05:26 2016 +0000"
      },
      "message": "Merge \"Make gdbclient respect custom OUT_DIR settings\""
    },
    {
      "commit": "35dd4d66b63c2bcec936fde8f1cdd064f53e0c98",
      "tree": "f245bcc0c899de7f07ca756d5e4c92f7588b36f2",
      "parents": [
        "72f24a0fa1579ba837bdc7b5c605eedd6990999a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 15 15:45:01 2015 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 06 05:54:02 2016 -0800"
      },
      "message": "Make gdbclient respect custom OUT_DIR settings\n\nChange-Id: Icb43798717f9b2aa6144f59624c2e3b7f59f42f8\n"
    },
    {
      "commit": "409ab9f21222c9c6c5c553c6340b43f4e6aae09d",
      "tree": "d7153abafa552d2f41318b850be0169811b15667",
      "parents": [
        "f3cbb4c77dd9846b611f8dde636d6b0ac344ea23"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 17 12:06:21 2015 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 17 12:58:00 2015 -0800"
      },
      "message": "Update gdbclient to use the multiarch gdb.\n\nBug: http://b/26224915\nChange-Id: I9bfcc08e6c92c18f6c774ce7f9ad13c9b055fc68\n"
    },
    {
      "commit": "c14b612ba17e7c92a4f663e126465d5916061b0c",
      "tree": "52ed33b9aefd5e973ff6501dc7306c3e190d6633",
      "parents": [
        "6cf9ae5b6bc8b3bebd9769617c06845402b0a7a5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 30 16:29:57 2015 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 30 16:29:57 2015 -0800"
      },
      "message": "Modify the dso rule to allow spaces in [] names.\n\nSome of the map names have spaces in them, but only the ones that look\nlike:\n\n[anon:atexit handlers]\n\nSo allow spaces between a [ and a ].\n\nChange-Id: I09f1b50533fcd2e79acda199dcc3fb99c6d8428f\n"
    },
    {
      "commit": "44b84a8e030c26280fbc92c2c9e67750147294e1",
      "tree": "8be1dbb19c0637cb5fee077e1090eb52f5bc253f",
      "parents": [
        "3fd43b5bf4850f187989d944ac39cd6b6fb5ed59"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 28 11:57:37 2015 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 28 14:21:59 2015 -0700"
      },
      "message": "Don\u0027t throw when we fail to find a device.\n\nInstead, set it to None and let the caller handle things.\n\nChange-Id: Ic4f27fdb52ebd6bc5b4048e4e688ec7bd2509bfa\n"
    },
    {
      "commit": "66bb9fa2cd8f13e0965f99c2b28ab8f0eb4e8e9e",
      "tree": "4a72f170056c6ed12a2d297b432515401685e5c0",
      "parents": [
        "865c462b1a5d30c745309196f49d25d64236697d",
        "19f18ce06a97c1601754f81b6b2c24133b879a1b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 22 23:20:01 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 22 23:20:01 2015 +0000"
      },
      "message": "Merge \"gdbclient.py: set directory for gdb.\""
    },
    {
      "commit": "19f18ce06a97c1601754f81b6b2c24133b879a1b",
      "tree": "435b6ab1386bd22861dd9945e2f53b2ed19e120e",
      "parents": [
        "d427f1e5f538537b78361c1fc905e8694f1f85a1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 22 16:08:13 2015 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 22 16:19:02 2015 -0700"
      },
      "message": "gdbclient.py: set directory for gdb.\n\nMake sure gdb knows where the source files are, even when gdbclient.py\nisn\u0027t being run from the root directory.\n\nChange-Id: I8f604ba58f4c06b26f2a1f8e917e2a1c1c137ccd\n"
    },
    {
      "commit": "639d1c491a073eb1c70795ff53003dc3c44f371b",
      "tree": "561898127cf6afef749a58474618ce9c602f720b",
      "parents": [
        "5db18adc607a0509b0646deda9c20b16a6b5f2b7"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Oct 20 15:38:32 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Oct 21 10:25:25 2015 -0700"
      },
      "message": "gdb: allow gdbclient.py to find local files.\n\ngdbclient.py is always downloading the stripped version of executable\nfiles from the device. This CL first tries to find the unstripped local\nfile before falling back to the stripped version.\n\nBug: http://b/24947939\nChange-Id: I7a49d0d8b28590ee99ce892d3e3476921f4ae974\n"
    },
    {
      "commit": "d1fe92f375b088ff61369d35b51673b5d524c39c",
      "tree": "6618f0967eb2cf266a6636f2eb8830c11020dc5f",
      "parents": [
        "320f881efeeabe670eabf26c120abc94f901ef9b"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Oct 05 15:36:28 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Oct 06 09:18:47 2015 -0700"
      },
      "message": "gdbclient.py: set PWD when querying makefiles.\n\nPython\u0027s subprocess.check_output() cwd argument does not change the PWD\nenvironmental variable, which is what dumpvar.mk uses to turn relative\npaths into absolute paths. This led to incorrect symbol paths when\ngdbclient was not run from the root directory.\n\nThis CL fixes the bug by manually setting PWD before calling the\nmakefile. It\u0027s possible that dumpvar.mk should be using a different\nmethod to get the current directory, but I was scared to change any\ncore build logic and this approach seems to work just fine.\n\nChange-Id: Ibe3db0bef6694934c512918f7562029313b1deae\n"
    },
    {
      "commit": "320f881efeeabe670eabf26c120abc94f901ef9b",
      "tree": "b8e0c0942505d4ec86b011c572d778841ad9c268",
      "parents": [
        "f1b53b587871a16d2f444a77ea7256e6f8778c7e"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Oct 05 14:22:10 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Oct 06 09:18:36 2015 -0700"
      },
      "message": "gdbclient.py: add gdb connect retry.\n\ngdbclient.py can sometimes attempt to connect to the server before it\u0027s\nready, especially when debugging on an emulator. This CL adds\nfunctionality to retry the connection for up to 5 seconds.\n\nBug: http://b/24671386\nChange-Id: I65e77f918c3ea8433f992e67122cd48e3647c67b\n"
    },
    {
      "commit": "6382f1768a6bd1cda484737f7d59cde03bb5023c",
      "tree": "7161a78720c5d0623141b68564e2d9a5da9b61a6",
      "parents": [
        "9c2057ab43eda5679906acde0329d82b8a942d50"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Oct 02 15:58:05 2015 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Oct 02 15:58:57 2015 -0700"
      },
      "message": "Make gdbclient.py work in directories other than the root.\n\nChange-Id: I8e383052e15f41919c7107bf960092120d2c621c\n"
    }
  ],
  "next": "043bad746f7401bd16c0e254242714bd4e8cfec6"
}
