)]}'
{
  "log": [
    {
      "commit": "3bc7238ded3e123ff7f7211d92c88b2731fec3d7",
      "tree": "bb48d834b3466f30f6accdd00aa4af9c628e0b89",
      "parents": [
        "75112acdacabe2452956bb798e0f0a7e6850ac47"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Mon Sep 24 10:44:29 2018 +0200"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Wed Sep 26 15:54:46 2018 +0200"
      },
      "message": "Annotate binder services and tokens.\n\nFor all instances of android.os.Binder, try to annotate them by\nretrieving their descriptor. If the instance is a also (sub)class of\n\u0027descriptor$Stub\u0027, mark it as a binder service. Otherwise, mark it as\na binder token.\n\nExample:\nandroid.server.wm.Session@1aa85368 binder service (android.view.IWindowSession)\n\nBug: 114365505\nTest: ahat-tests (including new tests) passes, visual inspection\nChange-Id: I7343467be5b745960c6e87c850c4125945de2f85\n"
    },
    {
      "commit": "4c498ddc858f71221f3248e95ce51f26279d8847",
      "tree": "60ab178e92bd35ab59a0bde8e773536de038298c",
      "parents": [
        "70cf9e4616766c1718145ead09bc974377e1eabc"
      ],
      "author": {
        "name": "Zimuzo",
        "email": "zezeozue@google.com",
        "time": "Wed Sep 19 12:13:59 2018 +0100"
      },
      "committer": {
        "name": "Zimuzo",
        "email": "zezeozue@google.com",
        "time": "Thu Sep 20 11:51:39 2018 +0100"
      },
      "message": "Annotate BinderProxy objects with their interface\n\nExample: android.os.BinderProxy@1ae2d838 for android.app.job.IJobScheduler\n\nTest: Added fake Binder stub and proxy classes, verified that a class ending with $Stub$Proxy and holding a reference to a BinderProxy object is marked as the BinderProxy interface\nBug:114363695\nChange-Id: I19dd24cafbb4c022dda583408f02cc2fae362825\n"
    },
    {
      "commit": "d86d281b0468c389789b72e275755e32e196fc93",
      "tree": "cfcb583feef78247478a8fdd54f4bb20b218eb2f",
      "parents": [
        "0651b221dd55042ac69e2c0b2cec8843f10f5dfd"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jun 07 17:09:03 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 06 14:24:04 2018 +0100"
      },
      "message": "Add option to view all instances of a class.\n\nNot just direct instances, but also instances of subclasses of the\nclass.\n\nThe objects view now includes a description of what objects are being\nshown at the top of the page, such as:\n\n    Site:           ROOT -\n    Class:          android.os.Binder\n    Subclasses:     excluded (switch to included)\n    Heap:           any (switch to app, image, zygote)\n    Count:          17,424\n\nWhere \u0027included\u0027, \u0027app\u0027, \u0027image\u0027, and \u0027zygote\u0027 are links the user can\nuse to change the filter for selected instances.\n\nTest: atest ahat-tests --host, with new test added.\nTest: manually launch ahat, view objects page and modify filters.\nBug: 109789538\nBug: 111439037\n\nChange-Id: Iedb7d9cf9252335f24208e7f5ba052bf3845e58c\n"
    },
    {
      "commit": "8d2e114bed17aa2fe6fafff88a1c6567e85ef3f9",
      "tree": "67de71a17850c831eff577815f0348c1b64e7659",
      "parents": [
        "e42e870e8911a4b6eb16acfdaffb360e991f4892"
      ],
      "author": {
        "name": "Zimuzo",
        "email": "zezeozue@google.com",
        "time": "Fri Aug 31 16:03:14 2018 +0100"
      },
      "committer": {
        "name": "Zimuzo",
        "email": "zezeozue@google.com",
        "time": "Mon Sep 03 12:41:12 2018 +0100"
      },
      "message": "Fix ahat test\n\nTests started failing with proguard mappings generated with R8 1.3.18-dev.\nWe now support mulitple stack frames for the same method across different line ranges.\n\nBug:113501789\nTest: atest ahat-tests\nChange-Id: I47fe5afdefe26d2dfee1914e846c86f869e6f67e\n"
    },
    {
      "commit": "efadbcdcd2dc3010780ec9ace04dd7b9bf9b04d8",
      "tree": "6ef5ed5c5b71dc15dd252242a36e102727b55cf4",
      "parents": [
        "b789d8966c1ca9cdd39d2ea54ea90aae28a3d5af"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 26 12:41:52 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jul 30 11:43:58 2018 +0100"
      },
      "message": "ahat: support java.lang.ref.Finalizer\n\nBecause some implementations use that in contrast to ART\u0027s\njava.lang.ref.FinalizerReference to track finalizers.\n\nBug: 111867529\nTest: m ahat-test, with new test added.\nChange-Id: Id9ae4e32f0e6c852fabbb73c790dbd7d9f28c51f\n"
    },
    {
      "commit": "eb5ff616e51b4b5129ce248703bb615a83d876b5",
      "tree": "6e59877cca59760d447ec66694c48613a354d085",
      "parents": [
        "7f7f9d3991f3a55da8934a3b72890d4776373598"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jul 18 09:43:39 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jul 18 09:58:41 2018 +0100"
      },
      "message": "ahat: add support for parsing 0x0C HEAP DUMP record\n\nTest: m ahat-test\nTest: manually launch ahat on the heap dump from the bug that uses the\n      0x0C HEAP DUMP record.\nBug: 111147686\nChange-Id: Ibf779c4e066f14777c1931ae76b2b9f64dba27b9\n"
    },
    {
      "commit": "2fbc04db154668f1f53da8e674a28bc326e8439a",
      "tree": "e86a243f4fdecaccc83aa208ab2d6e160985e278",
      "parents": [
        "6743f1ebd4a1a266896541acb5c4dde1f78e708f"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jul 02 11:52:33 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 17 16:28:28 2018 +0100"
      },
      "message": "Add --retained option to ahat\n\nWhich allows you to override what kind of references ahat considers to\nretain an object.\n\nBug: 79131879\nTest: m ahat-test, with new tests added.\n\nChange-Id: I9bc2ed1aa0d0da27dd0a8a3b6456808c973fcdf9\n"
    },
    {
      "commit": "e824a3082c3ba19fccf7e91bed3765638301b533",
      "tree": "5ecc200d8ce883e52ca4e06d110ad276f28b8ce9",
      "parents": [
        "f1255887da17bfb86da8a958678bae7422cc00ab"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jul 09 10:26:15 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jul 16 11:01:27 2018 +0100"
      },
      "message": "ahat: switch to using new dominators API\n\nBug: 79131879\nTest: m ahat-test\n\nChange-Id: I40086393b1c57d59e5bfdc7c089372bce42779be\n"
    },
    {
      "commit": "f1255887da17bfb86da8a958678bae7422cc00ab",
      "tree": "53c516714936be6088004fc8b6636f2a71dec292",
      "parents": [
        "2449d6d006dcb685d3b386edcf624e67ef37e12c",
        "5618f06204ce37f7738d346f70b5b97b327afd49"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 16 08:57:52 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 16 08:57:52 2018 +0000"
      },
      "message": "Merge \"Add a more flexible Dominators API.\""
    },
    {
      "commit": "e8c91f2d97101a967ce45d7cbb3d7606bfb4862e",
      "tree": "74f768917a7ce6ce33dc9a17012f982776345be0",
      "parents": [
        "0b4a439f808f4602c7b97364e49c5546f5100d51",
        "eb53697dc30111ddef7f6298566600f4e2fe3bf0"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 13 16:09:44 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 13 16:09:44 2018 +0000"
      },
      "message": "Merge \"Add instances to sites after removing duplicate ids.\""
    },
    {
      "commit": "5618f06204ce37f7738d346f70b5b97b327afd49",
      "tree": "ae7447a2225c94f9fa89ee9a7b3d4c61e9688996",
      "parents": [
        "cd15294af8ea5a7973ec6461733259882a124d17"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 03 11:37:06 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jul 13 14:01:16 2018 +0100"
      },
      "message": "Add a more flexible Dominators API.\n\nAdds a new API for accessing the DominatorsComputation that makes it\neasier to pass global state through the computation.\n\nBug: 79131879\nTest: m ahat-test, with tests for new API added.\n\nChange-Id: Id81a192abd1087773837714ccf2a7b3577a32992\n"
    },
    {
      "commit": "eb53697dc30111ddef7f6298566600f4e2fe3bf0",
      "tree": "4fbdc547d43583617f193005c4e2211bc159629d",
      "parents": [
        "cd15294af8ea5a7973ec6461733259882a124d17"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jul 11 17:00:22 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jul 11 17:04:18 2018 +0100"
      },
      "message": "Add instances to sites after removing duplicate ids.\n\nWait until we\u0027ve had a chance to remove instances with duplicate ids\nbefore adding instances to their corresponding allocation site.\n\nReuses the existing iteration over instances that was previously used\nfor updating registered native sizes and moves that after the\nreachability computation in preparation for some anticipated future\nchanges.\n\nBug: 110447634\nTest: m ahat-test\nTest: run ahat on the heap dump from the bug and confirm no duplicate\n      instances show up in the list of byte[] instances.\n\nChange-Id: Ie8651d26724148501a7534c9600885002627cd19\n"
    },
    {
      "commit": "b957c8918c4680897f2dec719ad6398bfbeb59d6",
      "tree": "1a1b796660afb307ecf68af527e9f9586e7331bd",
      "parents": [
        "cd15294af8ea5a7973ec6461733259882a124d17"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jul 06 10:20:37 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jul 11 10:40:01 2018 +0100"
      },
      "message": "Support heap dumps generated with HotSpotDiagnosticMXBean\n\nChanges required:\n* Add support for heap dumps with id size 8\n* Be tolerant of the use of undefined string id 0\n* Normalize class names such as \"[Ljava/lang/Class\" to \"java.lang.Class[]\"\n\nAlso:\n* Add a python script to dump a binary heap dump to text, which has been\n  historically useful for diagnosing issues like this one.\n\nBug: 111147686\nTest: m ahat-tests, with new test added.\n\nChange-Id: I3cb931fbf7614986b3381f57dcc8069f68740cf1\n"
    },
    {
      "commit": "f66c02b9852bc22bf74ba13b34e86f1863b92964",
      "tree": "a024afffe85e47e11bfadf6a51d487f149be1f46",
      "parents": [
        "b28683f43231e65860ecf91c96a8c0234542c019"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 10 13:53:27 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 10 14:09:27 2018 +0100"
      },
      "message": "ahat: ignore duplicate instances with the same id\n\nBug: 110447634\nBug: 111147686\nTest: m ahat-test\n\nChange-Id: I761dcdffaa9fff5d53281570ec0070cac25b1d72\n"
    },
    {
      "commit": "0028ce042e6b0f8446d59d0632c344824aae20fc",
      "tree": "d8c778319501177a583f52ae4562ce56ef06831c",
      "parents": [
        "cd059b6568f5ada2922ef34a45603720f03945e2",
        "975cd094da5323b9ecdce9076677152bb12703b7"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 27 13:47:00 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 27 13:47:00 2018 +0000"
      },
      "message": "Merge \"Distinguish between soft/weak/phantom/etc references in ahat.\""
    },
    {
      "commit": "975cd094da5323b9ecdce9076677152bb12703b7",
      "tree": "c910118a61d334c7349fe5ddb969bf8e2c6ca5d8",
      "parents": [
        "3fc03632687b2eabfa1906292b17b7792b9637af"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jun 25 13:09:13 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jun 27 12:40:37 2018 +0100"
      },
      "message": "Distinguish between soft/weak/phantom/etc references in ahat.\n\nInstead of grouping all the different kinds of references into a single\ncategory of \"weak\".\n\nBug: 79131879\nTest: m ahat-test\nChange-Id: I800f70b7f10386510e20d9d7b8a76069ddd38982\n"
    },
    {
      "commit": "629e7cfdf4bc6084851730fc786bbdb56890a360",
      "tree": "6796dca1043a37febcd0dcfb95d3c1c34560b4af",
      "parents": [
        "3fc03632687b2eabfa1906292b17b7792b9637af"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jun 20 09:52:18 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jun 21 09:28:37 2018 +0100"
      },
      "message": "Annotate $classOverhead arrays.\n\nART adds a fake byte[] $classOverhead static field to classes to show\nthe overheads associated with the class. This change causes ahat to\nannotate those $classOverhead arrays with the class that they are\noverheads for.\n\nTest: m ahat-test, with new test added.\nTest: Open an Android heap dump and visually inspect:\n      http://localhost:7100/objects?id\u003d0\u0026heap\u003dapp\u0026class\u003dbyte[]\nBug: 64832332\n\nChange-Id: Ief6ed7ce6c8c1196bc644df36f03c8e5158bf658\n"
    },
    {
      "commit": "35ce0b7710c0f51ff851bb0be98554cdf9d686e9",
      "tree": "5e74ab72ab8d1c1e1fca81c60c4b49fd30fc9b64",
      "parents": [
        "baee1502e5c5d32bd48716b880761d2f36a8f86c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jun 13 11:35:36 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jun 19 09:47:10 2018 +0100"
      },
      "message": "Add progress bar to ahat.\n\nIt can take a while for ahat to process a heap dump. This change adds an\nascii progress bar to ahat as it processes a heap dump.\n\nOther changes worth noting:\n* Adds progress tracking functionality to the dominators computation.\n* Updates Parser to use builder pattern to make it easier to specify\n  different parsing options.\n* Stops pretending ahat runs with Java 1.7.\n\nSample output:\n\nPreparing localhost/127.0.0.1:7100 ...\nProcessing \u0027foo.hprof\u0027 ...\n[ 100% ] Reading hprof ...\n[ 100% ] Resolving references ...\n[ 100% ] Reversing references ...\n[ 100% ] Initializing dominators ...\n[ 100% ] Resolving dominators ...\nServer started on localhost:7100\n\nBug: 68842538\nBug: 110129502\nTest: m ahat-test\nTest: Run on large heap dumps, manually inspect progress bar output.\nChange-Id: I4903fef57371fa226f7802c50902319cb7506e68\n"
    },
    {
      "commit": "7d7457c36d5c62a98d490dcb5db64646a1b5792a",
      "tree": "7ed762509497b5710f8e1e37adf941f29082fbc8",
      "parents": [
        "0e3a330f4a545a6a2d352bd4a803c8387f54e76b"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jun 18 12:54:23 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jun 18 12:54:23 2018 +0100"
      },
      "message": "Fix bug in Value.getBaseline().\n\nThe method wasn\u0027t being overridden by InstanceValue.getBaseline as\nintended, which would lead to broken links in the UI.\n\nTest: m ahat-test, with regression test added.\nTest: Manually confirm a link to a \"was\" part of a diffed field works\n      in the UI.\nBug: 77943151\n\nChange-Id: I98a40afe2161617ba2199574b4fd57a076fc8bde\n"
    },
    {
      "commit": "f83f83dfe3c5168a3bf191723933be662785e108",
      "tree": "9ce7f363a68c340fd9b15b9bbee5733cdf92e7ce",
      "parents": [
        "408bdc604e4fe230bf90ffa6816bfbbb3786806e"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jun 01 13:17:08 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jun 12 12:42:05 2018 +0100"
      },
      "message": "Improve ahat dominators computation.\n\nImprove the space complexity of the ahat dominators computation\nalgorithm to be linear in the size of the heap dump being processed.\n\nPerformance of the algorithm is on par with the previous version of the\nalgorithm, verified by running it on a collection of 150 or so Android\nheap dumps laying around from old memory investigations. For example:\n\n  old          new\n0m1.161s --\u003e 0m1.333s\n0m2.800s --\u003e 0m3.350s\n0m2.805s --\u003e 0m2.429s\n0m4.161s --\u003e 0m5.547s\n0m4.553s --\u003e 0m3.482s\n0m5.714s --\u003e 0m6.373s\n0m6.254s --\u003e 0m5.439s\n0m11.615s --\u003e 0m11.456s\n0m14.377s --\u003e 0m14.543s\n\nThe new algorithm performs considerably better in those cases where the\nold algorithm has excessive memory requirements. For example:\n\n   old          new\n0m11.135s --\u003e 0m5.915s\n0m11.596s --\u003e 0m7.805s\n0m31.886s --\u003e 0m10.569s\n1m10.972s --\u003e 0m14.350s\n\nFor the heap dump in b/79200800, the old algorithm would be killed after\ntrying to use more than 64GB of memory. The new algorithm takes roughly\n2m30s and 5GB of memory to process that same heap dump.\n\nBug: 79200800\nTest: m ahat-test\nTest: Open a non-trivial heap dump and compare retained sizes for the\n      top 30 or so rooted instances between the old and new version of\n      the algorithm.\n\nChange-Id: I8f939b35cf3867d3062863fd9dedeee487db9591\n"
    },
    {
      "commit": "26d465f1d8ca2b66b9c2766c9019aa2033d0e1be",
      "tree": "123013249d77b24641a2d86e4bd6c9fbc40af0e9",
      "parents": [
        "2b40dd35c65ad644d448611750f5b577e97594a1"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jun 07 13:08:08 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jun 08 10:19:01 2018 +0100"
      },
      "message": "Add a tradefed config for ahat\u0027s unit tests.\n\nAnd a minor unrelated style cleanup.\n\nBug: 38219110\nTest: m ahat-test\nTest: tradefed.sh run AndroidTest.xml, without devices attached.\nChange-Id: Ifcb99ee08a43925ae79bb223a948522ab21c99c6\n"
    },
    {
      "commit": "75c6fcac1e31ffc7fa59fdea1ddf04c4e7e870d1",
      "tree": "e7a1335e6c3ba0cf0550774e2d1e599500a956c8",
      "parents": [
        "9ddef18ae95859a985e7a0de7e22999fcbc28e07"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jun 04 15:44:17 2018 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jun 04 15:47:23 2018 +0100"
      },
      "message": "Ignore comment lines in proguard mapping.\n\nComment lines are now being generated by R8 in the proguard mapping.\nUpdate the proguard mapping parser to handle those. Fixes the ahat test\nfailure:\n\n1) diffMatchedHeap(com.android.ahat.DiffTest)\njava.io.IOException: Unable to load proguard map\n  at com.android.ahat.TestDump.load(TestDump.java:116)\n  at com.android.ahat.TestDump.getTestDump(TestDump.java:269)\n  at com.android.ahat.TestDump.getTestDump(TestDump.java:241)\n  at com.android.ahat.DiffTest.diffMatchedHeap(DiffTest.java:32)\n  ...\nCaused by: java.text.ParseException: Error parsing class line: \u0027# compiler: R8\u0027\n  at com.android.ahat.proguard.ProguardMap.parseException(ProguardMap.java:142)\n  at com.android.ahat.proguard.ProguardMap.readFromReader(ProguardMap.java:191)\n  at com.android.ahat.TestDump.load(TestDump.java:114)\n  ... 33 more\n\nChange-Id: I70c9deb414086f454a1f3fefd3bace5b78953b44\nTest: m ahat-test\n"
    },
    {
      "commit": "e24847c2222b41c140adeda9e7dd16adac414131",
      "tree": "bb924aa98e3d3d25a835f943be8686d6115c5fe5",
      "parents": [
        "d2b31918cd8de0920fd316dd344ff3de6a4e05c3",
        "b7732a3fcf06a55075a601dbc593b23a6fc71dbf"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 04 12:38:34 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Dec 04 12:38:34 2017 +0000"
      },
      "message": "Merge \"Add javadoc for all public ahat API.\""
    },
    {
      "commit": "b7732a3fcf06a55075a601dbc593b23a6fc71dbf",
      "tree": "bca727e1c8dfe7a4f7b3fb19cf80ffa72f6e69b8",
      "parents": [
        "a602c56ba1a82d70eb40de35e7c716477a46ee28"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 16 10:23:41 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Dec 04 10:22:44 2017 +0000"
      },
      "message": "Add javadoc for all public ahat API.\n\nAnd tighten up the API a little more.\n\nThe only functional change is to replace the Sort.WithPriority class\nwith a Sort.withPriority function so that the Sort.WithPriority class\ncan be made private.\n\nTest: m ahat-test\nChange-Id: Iba0ac04767a20c9008f209a777294ecaccc64ffc\n"
    },
    {
      "commit": "32ca7786f98d5e3adb73edd8dff220b40413700f",
      "tree": "6c91ad1a90acb8016ed189c419dfd669cf5fb14e",
      "parents": [
        "a602c56ba1a82d70eb40de35e7c716477a46ee28"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 30 09:35:52 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Nov 30 09:35:52 2017 +0000"
      },
      "message": "ahat: fix bug parsing ids with the high bit set.\n\nWith this fix, ahat will no longer generate broken links for objects\nwith ids greater than 0x7FFFFFFF.\n\nBug: 69706820\nTest: m ahat-test\nTest: Manually heap dump from b/69706820 and verify ids parsed correctly.\nTest: Automated test planned for followup as part of b/69706820.\nChange-Id: Ie49f49f8959953cff54a543eb7a25bed806b7f1c\n"
    },
    {
      "commit": "88aa6900f62421906af0c3f7a0c245b4f2aef50c",
      "tree": "348eb05b943f2960794ac6af221bc63ec627a55f",
      "parents": [
        "e45918a82389c04d2624ebc020516154af1e4e8f"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Nov 06 10:08:27 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 14 09:49:50 2017 +0000"
      },
      "message": "Fix bug in proguard deobfuscation of file names.\n\nConfigure proguard to preserve stack traces in the test-dump so we can\nproperly test ahat\u0027s deobfuscation of stack traces.\n\nFix a bug in proguard deobfuscation of file names. Specifically, we\nshould always compute the file name based on the class associated with a\nstack frame, regardless of whether or not the method has been\nobfuscated.\n\nRestructure test-dump program to test more cases of stack frame\ndeobfuscation.\n\nTest: m ahat-test, with expanded proguard deobufscation test.\nChange-Id: Idbb564147c6aea6b9c2091612ecf17c01070d5ac\n"
    },
    {
      "commit": "0a85a95210b3874722a3b36b57fb12307b4b635d",
      "tree": "9476eb6ae4c572e018bc9d09fd48836e6c34e72a",
      "parents": [
        "460e09c5a5a09937825fe101d260d5c917144369"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 30 10:54:44 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Nov 01 10:56:18 2017 +0000"
      },
      "message": "Tighten up ahat public API.\n\nAnd add build rules to make it very explict when the public API changes.\n\nChange-Id: I2319eb2004e87957c5d040d32a109ca09a06a166\nTest: m ahat-test\nTest: Change public API and verify build complains.\nTest: Change non-public API and verify build does not complain.\n"
    },
    {
      "commit": "1b79bbcdc1c9fee58cec0da6b19afd75d0bb47c9",
      "tree": "eece222b38346dd07a78c1783f92654140b91637",
      "parents": [
        "9041c606de11412a036bac2d2068d6f151a0fab7"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Oct 20 10:41:50 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Oct 26 16:18:45 2017 +0100"
      },
      "message": "Fix bugs with strong versus weak reference paths.\n\nThis fixes a few issues with strong versus weak reference paths:\n* It was possible to have a path from gc root with a root in the\n  middle of the path.\n* It was possible to have a path from gc root with a cycle, which\n  would cause ahat to go into an infinite loop.\n* It was still possible to have a path from gc root through weak\n  references when there existed other paths from gc root only through\n  strong references.\n\nBug: 64592321\n\nTest: m ahat-test, with new tests added.\nChange-Id: I2d3cc8c5a398aad24d70c3a428bdc3a470ddb3aa\n"
    },
    {
      "commit": "c81bf0f5515cd2678f3d7126282c42eae9add6c0",
      "tree": "a012b73bcf3978575aaf40e256a6cf42f430638b",
      "parents": [
        "432d91004b79c79deebeee6f6197e43adf6caafd"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Oct 12 09:55:19 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Oct 12 10:04:45 2017 +0100"
      },
      "message": "Give even better error messages on failure to launch ahat.\n\nIn particular, explicitly state that a heap dump \"does not appear to\nbe a valid Java heap dump\" on HprofFormatException.\n\nBug: 64318055\nTest: m ahat-test\nTest: ahat Android.mk\nTest: ahat FileThatDoesNotExists.hprof\nTest: ahat etc/L.hprof \u0026 ahat etc/O.hprof\n\nChange-Id: I014b465e23e48941655bcbb3505cec8fd7965fc9\n"
    },
    {
      "commit": "8cc213436f3d15a44fb86eda04e16e24923a8f4c",
      "tree": "b65de1e6096d50325bcf0ea47f8ed73b09c37622",
      "parents": [
        "baeedfee3521c295916e3ae85afa2cb5dee7d6a5"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Oct 10 17:23:33 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Oct 10 17:23:33 2017 +0100"
      },
      "message": "Reorganize ahat source directory layout.\n\nIn particular, use a directory tree that reflects the Java package\ntree to facilitate use of IDEs for browsing the ahat source code.\n\nTest: m ahat-test\nChange-Id: I00c205df420c2a53b211f7b772dd5b45cedf6ae3\n"
    },
    {
      "commit": "baeedfee3521c295916e3ae85afa2cb5dee7d6a5",
      "tree": "9a9566b73bd916befb9ce1c31c2ff309d63ff28e",
      "parents": [
        "f167da77ae31ca0a5dbd88410b2eb14589b1db13",
        "455f5528608de8fe3bfcf674c0e0e31797c9ab8b"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Oct 10 12:50:26 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 10 12:50:26 2017 +0000"
      },
      "message": "Merge \"Use decode instead of parseLong for query params.\""
    },
    {
      "commit": "f167da77ae31ca0a5dbd88410b2eb14589b1db13",
      "tree": "bb093cd0fc81a151974b519a258196e4ace86d5f",
      "parents": [
        "c5b13f57132415352bcd4a0161da6110026358b5",
        "82eeacee022429698a4b3516a1c114f51d6ef1a6"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Oct 10 12:50:16 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 10 12:50:16 2017 +0000"
      },
      "message": "Merge \"Distinguish between weakly reachable and unreachable instances.\""
    },
    {
      "commit": "82eeacee022429698a4b3516a1c114f51d6ef1a6",
      "tree": "82ca9b51c869d62ab0712d134ab43d9b38419702",
      "parents": [
        "25ae37970757ab06bb75b63a933926a4db4bb38d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 09 10:08:35 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 09 10:08:35 2017 +0100"
      },
      "message": "Distinguish between weakly reachable and unreachable instances.\n\nAnnotate weakly reachable instances with \"weak\" instead of\nunreachable. Don\u0027t show a sample path from GC root for unreachable\ninstances.\n\nBug: 64785007\nTest: m ahat-test\nTest: Manually inspect strong, weak, and unreachable instances.\nChange-Id: I1cb73d47198be847eaccd5855f6f14acf828a75a\n"
    },
    {
      "commit": "d94acefd62012791b09d51d54b39538d5f96eb41",
      "tree": "cb548849892422ace16bcdea4ceda0dfc70a975e",
      "parents": [
        "25ae37970757ab06bb75b63a933926a4db4bb38d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 09 09:23:03 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 09 09:38:33 2017 +0100"
      },
      "message": "Revert \"Don\u0027t show sizes with sample paths.\"\n\nThis reverts commit 4c0fe0240aaca472a045174d24b0846da33242d5.\n\nBug: 67234670\nTest: m ahat-test\nTest: Manually inspect some sample paths.\n\nChange-Id: I66b32c3a7d19d9da7d56ab162313932411c9bbff\n"
    },
    {
      "commit": "455f5528608de8fe3bfcf674c0e0e31797c9ab8b",
      "tree": "884965d131f2a44527fa452d7df61fc030823065",
      "parents": [
        "25ae37970757ab06bb75b63a933926a4db4bb38d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Oct 04 09:50:30 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Oct 04 09:58:52 2017 +0100"
      },
      "message": "Use decode instead of parseLong for query params.\n\nThis makes it possible to enter a hex id of an object in the url,\nwhere before you had to manually translate the hex id to decimal\nfirst.\n\nSwitch to using the hex format for the id in links to be more consistent\nwith the summary presentation of objects.\n\nBug: 28669428\nTest: m ahat-test\nTest: ahat test-dump/O.hprof, visit http://localhost:7100/object?id\u003d0x6004fdb8\nTest: launch ahat and click on object links and confirm they still work.\nTest: run ahat on a heap dump with bitmaps and confirm they still show up.\nChange-Id: Ia6a84b4674a95519dce1ff701086a86d551a51d1\n"
    },
    {
      "commit": "10e4b85ac3171635429b7fd1aacd65aa327ce983",
      "tree": "76e1c12cc2b19d7ae0f1a91ac72034a1c0384a1a",
      "parents": [
        "f67f115423c9ef5aa62a33c12670cd8f89457c9c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 02 09:49:30 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 02 09:49:30 2017 +0100"
      },
      "message": "Update ahat version number to 1.4.\n\nTest: m ahat-test\nTest: open heap dump and verify version number on overview page\nChange-Id: I03a38e62d9f0c7d3ccbbfb0ddbf6297ef04d73ba\n"
    },
    {
      "commit": "cdf68b16a212e71120ecccbf9f4d798b61259ed2",
      "tree": "fff027f87d46ba8b2d05569634b582a7eed58af1",
      "parents": [
        "b880a8a5926662bb49d9e66ceaa84be1f7f0d5f5",
        "5316bb897d5b66a9cf1eb38b28c562d48a8d2863"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Sep 29 08:15:49 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 29 08:15:49 2017 +0000"
      },
      "message": "Merge \"Give better error messages on failure to launch ahat.\""
    },
    {
      "commit": "5316bb897d5b66a9cf1eb38b28c562d48a8d2863",
      "tree": "bcf65315c542bca4f1c86a19d8b677e19b1049cb",
      "parents": [
        "e1e347dace0ded83774999bb26c37527dcdb1d5a"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Sep 15 10:53:07 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 28 09:59:11 2017 +0100"
      },
      "message": "Give better error messages on failure to launch ahat.\n\nBug: 28312435\nBug: 64318055\nTest: m ahat-test\nTest: manually launch ahat on a random file.\nChange-Id: Ic3b4158d33390cbd9cd6cb48f7e4b301dd61c5b5\n"
    },
    {
      "commit": "e949f82eaf7e35199a40ebbe5d8776e35b8c71c2",
      "tree": "ff87eb135271d2f0140a229c0fb3c8b47c4925d2",
      "parents": [
        "e1e347dace0ded83774999bb26c37527dcdb1d5a"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 28 09:50:44 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 28 09:58:09 2017 +0100"
      },
      "message": "Add support for parsing the ROOT_FINALIZING record.\n\nTest: m ahat-test, with a ROOT_FINALIZING record manually inserted into L.hprof\nTest: Open a heap dump from Android K that contains ROOT_FINALIZING.\n\nChange-Id: I484f2f4e1d90e22a3d5e5f83073566945c15f8d0\n"
    },
    {
      "commit": "26a982ad022a254ac57f84e996c31b4e271de028",
      "tree": "732c3aa6f3b27f7bd088658a62d4c1fa54bc2b51",
      "parents": [
        "a3b7cf0f12da448664536f8b7c793e73da0a4c7f"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Aug 23 09:33:02 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 21 11:19:07 2017 +0100"
      },
      "message": "Remove last remaining guava dependencies.\n\najat.jar reduced in size from 2.3MB down to 135KB.\n\nTest: m ahat-test, with HtmlEscaperTest added.\nChange-Id: I9a71ea46d1c953380ae3b07f3503ef16e4b97c8d\n"
    },
    {
      "commit": "a3b7cf0f12da448664536f8b7c793e73da0a4c7f",
      "tree": "bf0625a7388b4c9ecb2a5f548bec3029b1699ca3",
      "parents": [
        "07f8abbf2176c62174c6d9765cd132b08abbd490"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jul 26 10:21:48 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 21 11:19:07 2017 +0100"
      },
      "message": "Use a custom parser implementation instead of perflib.\n\nRemoves the dependency on perflib, avoids bugs in the perflib parser\nwhose fixes would not be readily available for ahat to use in the short\nterm, and avoids the need to pull in additional dependencies required to\nuse future versions of perflib.\n\nImproves heap dump processing performance by 30-50% on some examples now\nthat we can avoid overheads due to the impedance mismatch between\nperflib\u0027s object representation and ahat\u0027s object representation.\n\nOther relevant changes included in this CL:\n* Introduce enums for root types and basic types.\n* Compute instance sizes on demand rather than eagerly.\n* Introduce an abstraction for a collection of instances sorted by id.\n\nBug: 28312815\nBug: 33769446\nBug: 65356532\nTest: m ahat-test, this change fixes all previously failing tests.\nChange-Id: Ib14c294aa745cb03b02fa81d1544c78ff35e1edc\n"
    },
    {
      "commit": "07f8abbf2176c62174c6d9765cd132b08abbd490",
      "tree": "02516f5bd0c26624dcc6cb7a848ffddf8929dd4d",
      "parents": [
        "72f0ec717ce1ee13108d65af83fc99f8e507d75d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Aug 18 17:16:48 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 21 11:19:07 2017 +0100"
      },
      "message": "Remove perflib-based native allocation registry identification.\n\nIn preparation for removing dependency on perflib.\n\nTest: m ahat-test, change covered by NativeAllocationTest.\nChange-Id: Id91c2be4910699f9d4c90b44210f8d9bdb9c2318\n"
    },
    {
      "commit": "72f0ec717ce1ee13108d65af83fc99f8e507d75d",
      "tree": "407ba10312a3381c5e5033f11803937a3850ab69",
      "parents": [
        "67246e9693e8fdb3b9edd101242e54586ed3fd5a"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Sep 13 17:18:37 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 21 11:19:06 2017 +0100"
      },
      "message": "ahat: Expand test coverage using static heap dumps.\n\nA limitation of the existing ahat test framework was that it was only\neasy to test heap dumps generated as part of building the ahat tests.\n\nThis change adds static heap dumps from previous versions of Android\nto test issues that were specific to previous versions or that are\neasier to test with a hard-coded heap dump file.\n\nThe test heap dumps are now stored as resources in ahat-test.jar\nrather than being passed to ahat-test.jar using system properties.\n\nFixes a couple of minor bugs encountered when expanding tests.\n\nThere are currently two failing tests:\n1. Thread roots are not properly marked.\n2. Root records not in the default heap are not properly marked.\n\nTest: m ahat-test, from clean build, with new tests added.\nBug: 65356532\n\nChange-Id: I3fa77e2e75d535a1dd68a763c7c45913a9e4074d\n"
    },
    {
      "commit": "a490555f81e0e945cdfe9cf3bbfa2a8134d9a470",
      "tree": "019ae2f8311d9f8bae9ba72e7fa5ac7975d848d6",
      "parents": [
        "8d02c895a872926fba8618ae30d5c855ef337fe7"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Aug 25 16:49:41 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Sep 13 13:05:35 2017 +0100"
      },
      "message": "Store instance fields and types with class objects.\n\nRather than duplicating them for every class instance.\n\nTest: m ahat-test\n\nChange-Id: Ifddf49918ca8532332928ab09ed9983d6ad8858f\n"
    },
    {
      "commit": "8d02c895a872926fba8618ae30d5c855ef337fe7",
      "tree": "86d5e218e78cea29dc891ec1892d18be150402f4",
      "parents": [
        "21f89d2cc47e9f688b0d7143a282b17a241a50a2"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Sep 11 13:04:05 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Sep 13 12:48:59 2017 +0100"
      },
      "message": "Remove findClass and mClasses from AhatSnapshot.\n\nThe mClasses data structure mapping class names to class objects was\nonly used for testing purposes. Remove this data structure from\nAhatSnapshot and find an alternative approach for the test cases so\nthat users don\u0027t incur the runtime and memory costs of the data\nstructure.\n\nTest: m ahat-test\n\nChange-Id: If7804f943c6155448a5fded92ff71e946435b584\n"
    },
    {
      "commit": "21f89d2cc47e9f688b0d7143a282b17a241a50a2",
      "tree": "60070b7dc55e3201c5f147c7afcf9275812677ee",
      "parents": [
        "8f0d9f106e57299cd702d1edad91944f83868f0b"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Sat Aug 26 16:30:04 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Sep 13 12:48:59 2017 +0100"
      },
      "message": "Specialize Value types and make Value more type safe.\n\nSaves memory by removing an extra layer of boxing for primitive\nvalues.\n\nTest: m ahat-test\n\nChange-Id: I9d96d8ff0bd55cbeaa7ce51700133aca9f43621b\n"
    },
    {
      "commit": "29c4bee7526accc90e61a34004ab0b0d5cc907de",
      "tree": "5092ed8f2e2d25b1e2e544b03967705bd3cb6571",
      "parents": [
        "c69f6c310b49f2a22b756b318e5d5703ef304f0e"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Aug 10 10:16:15 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Sep 13 12:48:52 2017 +0100"
      },
      "message": "Make Site ids be independent of instance ids.\n\nCleans up construction of sites by allowing sites to be constructed\nbefore knowing of any instances that were allocated at the site.\n\nTest: m ahat-test, with new SiteTest added.\nChange-Id: I5429996a51aa3be3094989b3673d1b0a850cc3e8\n"
    },
    {
      "commit": "9a2e027947c3dbc07a63bfe532c86b9563843c72",
      "tree": "e35a7d5021abe590662d25470a54adc9fda0294a",
      "parents": [
        "cd63fc8a656a7548e97aac755dc9820d5bc11240"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Sat Sep 02 15:20:06 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Sep 04 09:49:13 2017 +0100"
      },
      "message": "Remove unnecessary work in dominators computation.\n\nAlso rename \u0027undomid\u0027 to better indicate how it is being used.\n\nThis fixes a performance problem with the dominators computation for\nsome pathological cases, in one case reducing the time to compute\ndominators from 10 minutes down to a few seconds.\n\nBug: 33957507\nTest: m ahat-test\nTest: manually verify overview and rooted numbers are unchanged for a\n      reasonably complex heap dump.\n\nChange-Id: I2a13f6b62f0bf56e6051da637d9872ea8f8b3d2d\n"
    },
    {
      "commit": "e017aa32ce25b360b5c3a77f7e2d3addb89281a8",
      "tree": "3bf4b9eb2126419db952fee188fef46a9181dd36",
      "parents": [
        "0b21333dbdbcb02c96148456f409f1b7d1f20697"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Aug 11 10:07:38 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Aug 17 11:36:07 2017 +0100"
      },
      "message": "ahat: show sample path through strong references.\n\nInstead of showing a sample path through weak references, which is\nmuch less useful for debugging why the object is retained.\n\nChange-Id: I2b8d8bc9368cdcabd7a369e45278ba9b44a38e40\nBug: 64592321\nTest: m ahat-test, with new gcRootPathNotWeak test added.\n"
    },
    {
      "commit": "0b21333dbdbcb02c96148456f409f1b7d1f20697",
      "tree": "913b2797fa89e647d3e05910c62101843136956e",
      "parents": [
        "54636c0e85ad1bcd5798324c0484122364e99298"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Apr 24 14:17:55 2017 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Aug 16 11:27:44 2017 +0100"
      },
      "message": "ahat: build ahat-test-dump correctly with javac\n\nUse BUILD_JAVA_LIBRARY instead of BUILD_HOST_DALVIK_JAVA_LIBRARY for\nahat-test-dump.jar so that no special handling is needed to enable\nproguard obfuscation. This way the ahat-test-dump can be obfuscated\nwhen compiled with javac as well as jack.\n\nBug: 64594350\nTest: m ahat-test, built from scratch\nChange-Id: Iad2890b314982b08da876595c3a093cd8ec9f7da\n"
    },
    {
      "commit": "8b903b982223389f2264f7ed506ff8cef40c832e",
      "tree": "6e12b01faa066706907e50a94df51b741ed21f3a",
      "parents": [
        "9710fbaea9022149887da4459b47011a803c76fb"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 25 09:15:08 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 25 09:15:08 2017 +0100"
      },
      "message": "Update ahat version number to 1.3.\n\nTest: m ahat-test\nTest: open heap dump and verify version number on overview page\nChange-Id: I46837904532c89ee4007f8f3dff5bc054fc87b1a\n"
    },
    {
      "commit": "3988af6473bf3005da0af13ea7bdcbcb6d187313",
      "tree": "c01e23bdad9debaa880fc3a379ed21e02179a2e6",
      "parents": [
        "28e535bd94c84d1019f18c46e189928435e2938d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jul 24 09:50:39 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Jul 24 09:50:39 2017 +0100"
      },
      "message": "Show diff column for fields only if diff is enabled.\n\nTest: Confirm that no diff column is shown when looking at instance\n      fields of an object or static fields of a class when no baseline\n      heap dump is given.\n\nChange-Id: Ic72d6aee31b8ca4ddbeaa53178c708fa733ac00b\n"
    },
    {
      "commit": "2687050dc64fa420ede2a9bd44550bd5af3e9c9a",
      "tree": "88687ed5f59b1cad0d3e331edc9fad1b7bd5aec4",
      "parents": [
        "e4a19f603a0e112d93b17d7e483bf9e8c9caa27b"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jul 04 15:55:19 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 20 09:31:22 2017 +0100"
      },
      "message": "ahat: Switch to a custom dominators implementation.\n\nRather than relying on perflib\u0027s dominators computation, use our own.\nBenefits:\n* Over 25% improvement in heap dump processing performance, improving\n  ahat startup time by around 1 to 3 seconds on typical Android heap\n  dumps.\n* Provides more flexibility if we want to tweak the dominators\n  computation in the future, for example by treating different\n  soft/weak/finalizer differently or additional performance tuning.\n* Opens the door to future performance optimizations based around\n  eliminating the impedance mismatch between perflib and ahat\u0027s\n  internal representations of the heap dump.\n* Opens the door to possible future features that involve computing\n  dominators of non-heap objects, such as dex code items.\n* Avoids a bug in perflib\u0027s dominators computation when there are\n  duplicate class or instance dumps.\n\nAlso included in this change:\n* Include \"class\" in toString for class objects.\n* Compute Site ObjectsInfos bottom-up in a separate pass.\n\nBug: 34884751\nBug: 33957507\nTest: m ahat-test, with new tests for incoming references and dominators.\nTest: Confirm dominator parity with perflib\u0027s dominators computation on\n      a number of real heap dumps.\nTest: Visually compare information reported for overview, rooted, sites,\n      object, and objects pages on a real heap dump against ahat-1.2.\n\nChange-Id: I4cf8fb177a0aaaee07ad6fddbc574682f91cc0f7\n"
    },
    {
      "commit": "47686f62332c9cfa015c47a1b2acdd60e74e6ea3",
      "tree": "1381be0cee6e43e0540d4bad6bfc3ce899206256",
      "parents": [
        "2cf565901845e4bafc663c24071c91d13c692858",
        "d6918e3c8faf5e445950402f7ea56233dd800948"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 23 11:13:25 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 23 11:13:27 2017 +0000"
      },
      "message": "Merge \"ahat: Improve field diffing.\""
    },
    {
      "commit": "d6918e3c8faf5e445950402f7ea56233dd800948",
      "tree": "4619decd589a63f7dccf4e6dd9c1250411f1e933",
      "parents": [
        "1f51ec0e1a80c4146793d2f853c2c7408073fe7c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jun 14 16:42:44 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jun 23 10:03:13 2017 +0100"
      },
      "message": "ahat: Improve field diffing.\n\n* Factor field diffing code out of Diff into its own class.\n* Switch to a new interface for diffing fields that does not rely on\n  being passed mutable lists.\n* Reimplement field diff to work better when fields have been added,\n  deleted, or reordered.\n\nBug: 62408050\nTest: m ahat-test, with new tests for field diff added.\nChange-Id: I56c0414f8f4c11809895d809494d752201d33563\n"
    },
    {
      "commit": "a4acabf6b1190e4d0a4e94a76d5db5972444348e",
      "tree": "181481476464c2ea4b799ad76758517012839933",
      "parents": [
        "1f51ec0e1a80c4146793d2f853c2c7408073fe7c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri May 26 10:39:43 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri May 26 10:39:43 2017 +0100"
      },
      "message": "Update ahat version number to 1.2.\n\nTest: m ahat-test\nTest: open heap dump and verify version number on overview page\nChange-Id: Ic1bd6dd55feea1cb1b725b257e4d88c82c12d0dd\n"
    },
    {
      "commit": "3ee4bff4eb293363b8fa5b263db55af59508efaf",
      "tree": "d7ab44338513d1699156c83fbc14a42c5aca6153",
      "parents": [
        "9b5b23555d9f82e98cabd75195eb95a1030fe1a6"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue May 16 13:31:01 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu May 25 16:48:41 2017 +0100"
      },
      "message": "Show RegisteredNativeAllocation sizes in ahat.\n\nBug: 36459946\nTest: m ahat-test\nChange-Id: I45f6dc19cf1e339a80e0d93b6f4bc58a93e571c7\n"
    },
    {
      "commit": "4c0fe0240aaca472a045174d24b0846da33242d5",
      "tree": "5e317591877d2e0b7e804d4dfaea4f2976b10c2d",
      "parents": [
        "4668c6c8f9908e8f7db71ec8a6683005471f7861"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed May 24 14:28:32 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed May 24 15:20:44 2017 +0100"
      },
      "message": "Don\u0027t show sizes with sample paths.\n\nBecause they clutter the sample path without adding much value.\n\nTest: Look at the page for an object in ahat.\nChange-Id: I722c3c99c98b39f5d620acf84c8ffa3cddb90df0\n"
    },
    {
      "commit": "e952792fdfde0f5034a4c1bb6bd47c0043b25405",
      "tree": "ddae4f31a67493f77f2b129baa895362f889e0d5",
      "parents": [
        "c8a5b6c38a4e934a7953b07cc12046b01c32ae5d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon May 22 13:58:48 2017 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon May 22 16:17:04 2017 +0100"
      },
      "message": "ahat: better handle bitmaps without pixel info available.\n\nDon\u0027t print an exception nor show a broken link for bitmaps whose\npixel data is unavailable.\n\nBug: 30307315\nTest: m ahat-test\nTest: Open recent heap dump and view list of Bitmaps.\nChange-Id: I4dda48f192ce6d4613decf52bf1f5e5100cdd846\n"
    },
    {
      "commit": "cad217cd109da1c3a89893534ecec5e33d136bde",
      "tree": "81b1d12bf1331df298e1e3e6acb6b9202f10af72",
      "parents": [
        "30e015c442c8033390c30d2f293604723c29bc75"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Feb 21 15:00:04 2017 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Feb 21 15:00:04 2017 +0000"
      },
      "message": "ahat: update README and manifest for release 1.1\n\nTest: m ahat-test, verify version shown in overview page is 1.1\nChange-Id: Ib15c43d9c42a34e24d74afae0cb6481452962bb8\n"
    },
    {
      "commit": "d640e29f9dad93f51e74026327dd53bb5a30eb33",
      "tree": "07aa0fe0cc35955936c06cb6b9ec6885bac239af",
      "parents": [
        "f629cfdbf6da3409aff177352e9ff41209b4570c"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Dec 28 15:46:03 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Feb 20 13:33:41 2017 +0000"
      },
      "message": "Show unreachable objects in ahat.\n\nBut don\u0027t count them against heap size or instance counts.\n\nBug: 33828707\nTest: ahat tests, including new InstanceTest.unreachableReferent.\nChange-Id: Ic39b6d5569159497dcc76c342e22ed99d2a71307\n"
    },
    {
      "commit": "f629cfdbf6da3409aff177352e9ff41209b4570c",
      "tree": "e59e58924de62f4ff9906a95691f259e94b7fd09",
      "parents": [
        "cda4f2e72f569e0a0d6119c1c75284fd44df79ab"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Dec 12 13:11:26 2016 +0000"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Feb 20 13:33:40 2017 +0000"
      },
      "message": "ahat: add support for diffing two heap dumps.\n\nahat now has the option to specify a --baseline hprof file to use as\nthe basis for comparing two heap dumps. When a baseline hprof file is\nprovided, ahat will highlight how the heap dump has changed relative\nto the hprof file.\n\nDifferences that are highlighted include:\n* overall heap sizes\n* total bytes and number of allocations by type\n* new and deleted instances of a given type\n* retained sizes of objects\n* instance fields, static fields, and array elements of modified objects\n\nAlso:\n* Remove support for showing NativeAllocations, because I haven\u0027t ever\n  found it to be useful, it is not obvious what a \"native\" allocation\n  is, and I don\u0027t feel like adding diff support for them.\n* Remove help page. Because it is outdated, not well maintained, and\n  not very helpful in the first place.\n\nTest: m ahat-test\nTest: Run in diff mode for tests and added new tests for diff.\nTest: Manually run with and without diff mode on heap dumps from system server.\nBug: 33770653\nChange-Id: Id9a392ac75588200e716bbc3edbae6e9cd97c26b\n"
    },
    {
      "commit": "cda4f2e72f569e0a0d6119c1c75284fd44df79ab",
      "tree": "1b02caaa7cd270912ecd8cd64205f1c70acfe648",
      "parents": [
        "69ed58348af817176734c5541f41737f00f9a1e9"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Sep 09 09:56:20 2016 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Feb 20 12:56:38 2017 +0000"
      },
      "message": "Refactor ahat\u0027s perflib api.\n\nThis change substantially refactors how ahat accesses heap dump data.\nRather than use the perflib API directly with some additional\ninformation accessed on the side via AhatSnapshot, we introduce an\nentirely new API for accessing all the information we need from a heap\ndump. Perflib is used when processing the heap dump to populate the\ninformation initially, but afterwards all views and handlers go\nthrough the new com.android.ahat.heapdump API.\n\nThe primary motivation for this change is to facilitate adding support\nfor diffing two heap dumps to ahat. The new API provides flexibility\nthat will make it easier to form links between objects in different\nsnapshots and introduce place holder objects to show when there is an\nobject in another snapshot that has no corresponding object in this\nsnapshot.\n\nA large number of test cases were added to cover missing cases\ndiscovered in the process of refactoring ahat\u0027s perflib API.\n\nThe external user-facing UI may have minor cosmetic changes, but\notherwise is unchanged.\n\nTest: m ahat-test, with many new tests added.\nBug: 33770653\n\nChange-Id: I1a6b05ea469ebbbac67d99129dd9faa457b4d17e\n"
    },
    {
      "commit": "595beb3ff0e8e9bc6ca9c3be453187a4a41ad7dc",
      "tree": "26480b97ebaf37f174416869552c96492b29e0cc",
      "parents": [
        "f8512f8515f7568984e1ca209929262ea88e4b59"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 06 14:11:54 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 09 15:50:27 2017 +0000"
      },
      "message": "Fix hprof/ahat for string compression.\n\nTest: m test-art-host\nTest: m ahat-test\nTest: m test-art-host with string compression enabled\nTest: m ahat-test with string compression enabled\nBug: 31040547\nChange-Id: I660e39c586d23f4a95686d484ca108466e52d249\n"
    },
    {
      "commit": "ec78c78508fa5ef6bac78ee2face0d30e67cf913",
      "tree": "f9959d9b691d35af9d4940703750523b7b5bd26e",
      "parents": [
        "a8188191477b7b5b01a3c4426c51c48cd55f6678"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri May 13 14:19:37 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Oct 21 16:24:07 2016 +0100"
      },
      "message": "Add support for proguard deobfuscation.\n\nTest: m ahat-test, with obfuscation of test-dump.hprof added.\nBug: 25812772\nChange-Id: I0f257432da570aa146e6bb5c549f014aecc0c326\n"
    },
    {
      "commit": "e087f1fe7f471242a6582eca77e2b72d2326ca09",
      "tree": "836edc000ca59ebe7203bfda07d36e1c1526e175",
      "parents": [
        "3da7190bae7c1d75edbc87f01343652c246639f2"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Oct 18 16:26:50 2016 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Oct 18 16:26:50 2016 +0100"
      },
      "message": "Release version 0.8 of ahat.\n\nTest: m ahat-test\nChange-Id: I964f86fc66f901bff7ddeda81dd42a6e658fda9d\n"
    },
    {
      "commit": "6928649223312692f9e2401c34dac37510ddbb2f",
      "tree": "19ddf5c68cf9e8c93e0a11cba756ceaed4be72a7",
      "parents": [
        "ad1f0ad512cac82e5db05aa8237608ba8424c130"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Sep 20 10:41:47 2016 +0100"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Sep 26 11:44:16 2016 +0100"
      },
      "message": "ahat: Show GC Root Paths.\n\nThe Dominator Path in the objects view is replaced by an augmented\nSample Path from GC Root, which includes non-dominator objects\nalong a sample path and field names.\n\nAlso, use blanks instead of \"0\" in heap tables when the size is 0.\nThis cleans up the pages a little, and conveniently lets us\ndistinguish between dominator and non-dominator objects in the Sample\nPath from GC Root.\n\nTest: m ahat-test, with new InstanceUtils.gcRootPath test added.\n\nBug: 27299030\nChange-Id: I53d75f9dcb3157c2b5b3afc74958711536cd67b6\n"
    },
    {
      "commit": "8f533645f225502939cf873ff6a0273d7d3a8ceb",
      "tree": "9f55afdbbfb5432720e9fe3b9d39b535a72fe51e",
      "parents": [
        "882c0e4899a2fb5ab8fbc739c4e38901beda8f2e"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Aug 15 11:01:01 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Aug 15 11:01:01 2016 -0700"
      },
      "message": "Update ahat README and manifest for release 0.7.\n\nChange-Id: Iccc5db7112cb92e24e9e294273a3ce2b0d4b7aba\nTest: Launch ahat and verify it reports 0.7 as the version.\n"
    },
    {
      "commit": "69272db247cfb99a9060f849762aa6ce3959788e",
      "tree": "e255a6aa7cac2be9b59848aed7b9d546857826a5",
      "parents": [
        "11a59a48474caa818ddf344575aa6afc51f45590"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Aug 05 16:26:57 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Aug 05 16:35:55 2016 -0700"
      },
      "message": "ahat: Target Java 1.7.\n\nSo that users can run ahat with Java 7 without getting unsupported\nmajor/minor version errors.\n\nChange-Id: I76faab19bc1b14c76d5fd6b3ba19fcb07855dfd9\nTest: m ahat-test\nTest: /usr/local/buildtools/java/jdk7/bin/java -jar ahat.jar\nTest: /usr/local/buildtools/java/jdk8/bin/java -jar ahat.jar\nBug: 28303627\n"
    },
    {
      "commit": "702e641f83fb36f6f094e2e7d8e8eea5cdcddd2e",
      "tree": "20cd0f969e6c49846a475f998f598d3065b8612b",
      "parents": [
        "b7e921c90540e87f73a14a232435b752ab12e906"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Aug 03 09:26:35 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Aug 03 09:26:35 2016 -0700"
      },
      "message": "Use ArrayInstance.getLength method.\n\nNow that perflib provides it as a better way to get the length of an\narray instance.\n\nChange-Id: I6bf8bb5541229e16f36fa8ede0a07cd0eb7b931d\nTest: m ahat-test\nBug: 30481345\n"
    },
    {
      "commit": "46e476bab4788231395a17564f364636132f91e2",
      "tree": "a1c9ee30a20cf9b06d2df7656b7e92482a09af4d",
      "parents": [
        "f79c0e6f74dfaf7ca5ba3fbe1c903abd65086a1a"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 21 13:52:48 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jul 21 15:05:48 2016 -0700"
      },
      "message": "Launch ahat server before processing the heap dump.\n\nChange-Id: Ic8f18ad3010cb0937f5ef68228359258ec4793fd\nTest: Manually launch ahat on a large heap dump with ahat already\n      running. Verify that ahat fails immediately.\nTest: Manually launch ahat on a large heap dump without ahat already\n      running. Verify that visiting localhost:7100 immediately\n      eventually resolves to the overview page rather than say the\n      site can\u0027t be reached.\nBug: 28611294\n"
    },
    {
      "commit": "e6a638785cca77af78a29a69043012f3f53e5617",
      "tree": "0d4f02f3d97a8732cd56da44524b346d3f27cbe2",
      "parents": [
        "393d3d614d6ee4f9c8850be93f3d0b5da0f45304"
      ],
      "author": {
        "name": "Gus Smith",
        "email": "gusss@google.com",
        "time": "Thu Jun 09 16:50:44 2016 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jun 30 19:25:45 2016 +0000"
      },
      "message": "Reformat files using Android-style imports.\n\nTest: m ahat-test\nChange-Id: Ib0eee0b7c414d85c245c7ef3163485cfa6ff34a4\n"
    },
    {
      "commit": "6919a01bd11e9117d1c8251531b1eb82ebe022f0",
      "tree": "5157a2264f9d6b01f6b3c4fb09d8bff28f9db893",
      "parents": [
        "c4d445a40bf00ab497b5e4d43a6b43eaafb5fa50"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Dec 15 09:15:00 2015 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Apr 19 09:33:36 2016 -0700"
      },
      "message": "Update to perflib-25.0.0 to improve processing performance.\n\nBug: 24542836\nChange-Id: I800dedd50c535df99a5cc38cd9da32fc33a35997\n"
    },
    {
      "commit": "c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2",
      "tree": "15ea16c413335183d6ed184cd35b1073b951f191",
      "parents": [
        "a20748aceb63396c5e09366968bbc71308f745df"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Feb 11 08:48:24 2016 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Feb 16 08:52:52 2016 -0800"
      },
      "message": "ahat: annotate char[] objects with their string values.\n\nBug: 26987597\nChange-Id: I1b0bf711c642f4b8a7fe56f0cd27496761db4147\n"
    },
    {
      "commit": "1a5baaabcdd79997508c91f1d8b1cf8547c9d1cf",
      "tree": "3a9a001b4e03d5f2053243ccfe19777e091a433e",
      "parents": [
        "c31fb58453ec1eba82390c3313623d37314c5490"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Dec 21 12:47:26 2015 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jan 22 08:43:11 2016 -0800"
      },
      "message": "Show registered native allocations in ahat.\n\nBug: 23130675\nChange-Id: I1d7f41a47a956b30611429b9bd395ec5f9580209\n"
    },
    {
      "commit": "a7f46cb9ccc34c3b9af2e3d2ad90c13f89a94829",
      "tree": "01d1cc300121e803ddf83196405beffceea39ae9",
      "parents": [
        "6147f7520a1279b58d58c5d73a707dea2fbdd376"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Dec 21 14:34:59 2015 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Dec 28 15:50:46 2015 -0800"
      },
      "message": "Don\u0027t duplicate the menu in the help page for ahat.\n\nFuture changes to the menu will need to be made in only a single\nlocation.\n\nChange-Id: I24ffcf17d5564b98bd3552d4ba9284eb6924d52b\n"
    },
    {
      "commit": "38f9eba1ad2094205410b47cd72ae3e4152c9432",
      "tree": "931a6ece1ae91b397db35dff21f85e62a8645f20",
      "parents": [
        "a04f57badca0a9211d45eb7bde44c1d1e8f159ff"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Nov 11 08:31:52 2015 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 17 11:13:57 2015 -0800"
      },
      "message": "Annotate root objects and show their types.\n\nThe summaries for root objects are now prefixed with \"(root)\" to show\nthey are roots, and the object\u0027s root types are listed in the object\nview.\n\nBug: 23784153\nChange-Id: Ib52ccb59cf0e3f28ac754c6caa564ebef34866ea\n"
    },
    {
      "commit": "7a16adb4e969e839d2f7ebb985e3c1fc9ec94ab6",
      "tree": "e84ddd66ae221931c3cb4d222150ecf55b909fc8",
      "parents": [
        "54af9bd45a482376b5fe8d4ac291afb5bc950065"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Nov 11 09:13:23 2015 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Nov 11 09:13:23 2015 -0800"
      },
      "message": "Change roots view to \"rooted\".\n\nInstead of just showing roots in the roots view, show all objects\nwhose immediate dominator is the SENTINEL_ROOT.\n\nBug: 24613815\nChange-Id: I96429d75395edfe109222e88d31cdc0bd87a7767\n"
    },
    {
      "commit": "1af86f17dc9a47faf1c6cd7ccd23d248fdc615ab",
      "tree": "22796622e72c8381bbb26d15c3f7dd35584dbdb2",
      "parents": [
        "530dcc8b74a0f4e5f54e2b2c326580d58594a2f7"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Oct 29 14:55:00 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 03 11:11:57 2015 -0800"
      },
      "message": "ahat: limit default number of results shown.\n\nPreviously, ahat had performance issues rendering large pages. This\nchange causes ahat to limit the number results shown in large pages by\ndefault, requiring the user to explicitly request more information if\nthey care about it.\n\nBug: 25114227\nChange-Id: Ief67396be254be4c84e6971f5b903a701206e17b\n"
    },
    {
      "commit": "b357730dd691e608f8a3d155330ab3763ce912cf",
      "tree": "ab84425d3dd7b1adf6f2f35cea705da7ecd54512",
      "parents": [
        "3f922d1f3ccd7a1341f887ac3e8176b5208ecf6d"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Oct 29 13:02:42 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Nov 03 10:34:20 2015 -0800"
      },
      "message": "Annotate References with their referent.\n\nAlso, don\u0027t include annotations in an object\u0027s link. That way we can\ndistinguish between the object link and any links in the annotations.\n\nChange-Id: I3fef3f5b2c343699f527cad9efa7c93a4b35a3a4\n"
    },
    {
      "commit": "77ff54b5055ec55806069c8d026b102df29857b5",
      "tree": "d2dca5b1118b6c36a35202a95a1ad8030dd904bb",
      "parents": [
        "e04f37908bfd72382163c1285853e662373229a2"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Aug 31 10:22:56 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 26 11:10:08 2015 -0700"
      },
      "message": "Limit summary string lengths to 200 characters.\n\nStrings longer than 200 characters are now truncated and are shown\nwith a trailing \"...\" instead of an end quote. The number 200 was\nchosen arbitrarily.\n\nBug: 23223379\nChange-Id: I96d7c9d563026233ff5f4962245b4c276d776a58\n"
    },
    {
      "commit": "c237b392d30eda47b5c499e61bb3167574e13c1b",
      "tree": "c0840a6d994e689547933cf37f06f706b7e74219",
      "parents": [
        "644044333f5f6d7ba7e327619ac0d0ce4e2609d3"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Oct 20 10:03:38 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Oct 20 10:03:38 2015 -0700"
      },
      "message": "Release ahat version 0.2.\n\n* Update ahat to use perflib studio-1.4\n* Add some help tips.\n\nChange-Id: I5aeafb27ff9e55f2ad1a6316184b8d3838e1df7c\n"
    },
    {
      "commit": "16065ce56394c73c87dcb78ead4164ddc80fddb3",
      "tree": "51f2ecde6fa86426f36e38eab950f40dccd3f0d8",
      "parents": [
        "a9c9d6abf5a37588f4eb1de7d3a12042a9fb3f81",
        "788b21e81ce4a944766a973dbd38331200da1b4a"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Oct 12 20:01:46 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 12 20:01:46 2015 +0000"
      },
      "message": "Merge \"Pay attention to string offset and count fields.\""
    },
    {
      "commit": "3524472e8f064dbd42e1a35d511a1efe36d2cbf2",
      "tree": "720ff24091021c6c3c6befc3b631d644df5144e9",
      "parents": [
        "d0d11f20811f260453f6dfe2e26d7dbd6ed55f01"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 10 16:45:54 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Oct 01 10:24:03 2015 -0700"
      },
      "message": "Generate an hprof file to test ahat.\n\nThis change sets up the infrastructure to write test cases for ahat\nthat make use of an hprof file automatically generated from a sample\nprogram.\n\nChange-Id: Id11f656afb69c96a26655cc4caeb745ad844f431\n"
    },
    {
      "commit": "788b21e81ce4a944766a973dbd38331200da1b4a",
      "tree": "ff7b478ae73c5d3934a4d8c5ffa5b6fce39d44e9",
      "parents": [
        "ce209462cc1a7ce235e5ac0d0e6db6b402f73441"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Aug 31 10:33:56 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 03 11:20:29 2015 -0700"
      },
      "message": "Pay attention to string offset and count fields.\n\nStrings can be represented as an offset and count inside a larger\ncharacter array. Pay attention to the offset and count fields when\ngetting the string value instead of returning the entire underlying\ncharacter array.\n\nBug: 23223379\nChange-Id: Idc95870e33ede90b23deed9489c8c4796107f585\n"
    },
    {
      "commit": "c21e4e67861f38e2ebce3cce633d01fcb8de5f1f",
      "tree": "1ddaa3d51fa4f4cf35761d722e29bd6dfe68e630",
      "parents": [
        "ce209462cc1a7ce235e5ac0d0e6db6b402f73441"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Mon Aug 31 16:16:14 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Sep 03 10:17:16 2015 -0700"
      },
      "message": "Make format args explicit in DocString.\n\nPreviously it was not clear that passing a single argument to\nDocString.text, DocString.append, or DocString.uri would be treated as\na format string. With this change, the \u0027text\u0027, \u0027append\u0027, and \u0027uri\u0027\nmethods take literal strings, and the new \u0027format\u0027, \u0027appendFormat\u0027,\nand \u0027formattedUri\u0027 methods take format strings.\n\nBug: 23782192\nChange-Id: I9a094575f0831de6659033052305f918c71ac8b7\n"
    },
    {
      "commit": "b730b78dac047c6d8ead93ad77605bcb7414f5ce",
      "tree": "feda8437b927954bcc849a6c5df6c11d46104355",
      "parents": [
        "24011e738d77dedb28c1b4d6ff34445cc2acc4a7"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Wed Jul 15 16:01:58 2015 -0700"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Aug 25 09:34:23 2015 -0700"
      },
      "message": "ahat - An android heap dump viewer. Initial checkin.\n\nahat is an android-aware heap dump viewer based on perflib with a\nsimple html interface.\n\nChange-Id: I7c18a7603dbbe735f778a95cd047f4f9ec1705ef\n"
    }
  ]
}
