)]}'
{
  "log": [
    {
      "commit": "1a055a895719ef76c519de60a5942edbf530950c",
      "tree": "a4bf0d34c1b3830ccccb419f3042ce836ec56f99",
      "parents": [
        "01003d40fc03080604f4dfb905a77a814feedffe"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Feb 15 19:04:40 2017 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Feb 15 19:04:40 2017 -0800"
      },
      "message": "RefBase.cpp remove unused include typeinfo\n\nTest: pass\nChange-Id: Iec9b9e1e9b6c974124b2043f550fb110cc22846d\n"
    },
    {
      "commit": "1811d156e9c6b5486d25090ec3e911632dc6edff",
      "tree": "c37354e50a853c4ed9ccfedd8c0c2b9ce904c6ef",
      "parents": [
        "b98317ff1cd85158fde27413c0dbc0d180935de6"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Sep 26 14:24:48 2016 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Sep 27 16:21:12 2016 -0700"
      },
      "message": "Fix more system/core/include warnings\n\nThe warnings in these files were hidden by -isystem\nframework/native/include.\n\nBug: 31752268\nTest: m -j\nChange-Id: I2a54376aea380ee24e6483fb7d35fdfe8991c490\n"
    },
    {
      "commit": "17b5b82d64686d482e6dcf96ee54fd62234d5f27",
      "tree": "59c9126e3cbcecbc0b06178f55bc3b39cadef1ce",
      "parents": [
        "588b3b0c03690573bb8147d9645f0400e5db9a22"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 15 18:15:37 2016 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 22 13:03:15 2016 -0700"
      },
      "message": "Fix warnings in libutils headers\n\nsystem/core/include is included in the global include path using\n-isystem, which hides all warnings.  Fix warnings in libutils\nheaders in preparation for moving from -isystem to -I.\n\n- Fix implicit cast from int64_t to long in Condition.h.  Remove\n  the __LP64__ check and always compare against LONG_MAX before\n  casting.\n- Fix implicit cast from size_t to ssize_t in KeyedVector.h\n- Fix -Wshadow-field-in-constructor warnings in Looper.h and RefBase.h\n- Move destructors for MessageHandler and LooperCallback to Looper.cpp\n  and ReferenceRenamer and VirtualLightRefBase to RefBase.cpp to prevent\n  vtables in every compilation unit.\n- Declare template variables in Singleton.h\n- Fix old-style casts in StrongPointer.h and TypeHelpers.h\n- Use template metaprogramming in TypeHelpers.h to avoid warnings on\n  memmove on non-trivial types.\n- Add an assignment operator to key_value_pair_t to complete\n  rule-of-three\n- Use memcpy instead of dereferencing a reinterpret_casted pointer to\n  treat the bits of a float or double as int32_t or int64_t\n- Escape unicode sequences inside doxygen comments between \\code and\n  \\endcode\n- Remove WIN32 ZD definition in Compat.h, %zd works fine with mingw\n- Fix WIN32 printf warnings in Filemap.cpp\n- Initialize mNullValue with 0 in LruCache.h, some of the tests use a\n  non-pointer type for TValue.\n\nTest: m -j native\nBug: 31492149\nChange-Id: I385a05a3ca01258e44fe3b37ef77e4aaff547b26\n"
    },
    {
      "commit": "23c857ebd68fec4296f8483a41a0fff6692c9ac2",
      "tree": "bee2569fb78084bc6f04e456aefc06dad863b836",
      "parents": [
        "07f14c9cdde718bface371d075ccc7f8bf16f098"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 02 18:39:30 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sat Aug 13 11:17:51 2016 -0700"
      },
      "message": "Make RefBase more robust and debuggable\n\nThis prevents two different kinds of client errors from causing\nundetected memory corruption, and helps with the detection of others:\n\n1. We no longer deallocate objects when the weak count goes to zero\nand there have been no strong references.  This otherwise causes\nus to return a garbage object from a constructor if the constructor\nallocates and deallocates a weak pointer to this. And we do know\nthat clients allocate such weak pointers in constructors and their\nlifetime is hard to trace.\n\n2. We abort if a RefBase object is explicitly destroyed while\nthe weak count is nonzero.  Otherwise a subsequent decrement\nwould cause a write to potentially reallocated memory.\n\n3. We check counter values returned by atomic decrements for\nplausibility, and fail immediately if they are not plausible.\n\nWe unconditionally log any cases in which 1 changes behavior\nfrom before. We abort in cases in which 2 changes behavior, since\nthose reflect clear bugs.\nIn case 1, a log message now indicates a possible leak. We have\nnot seen such a message in practice.\n\nThe third point introduces a small amount of overhead into the\nreference count decrement path. But this should be negligible\ncompared to the actual decrement cost.\n\nAdd a test for promote/attemptIncStrong that tries to check for\nboth (1) above and concurrent operation of attemptIncStrong.\n\nAdd some additional warnings and explanations to the RefBase\ndocumentation.\n\nBug: 30503444\nBug: 30292291\nBug: 30292538\n\nChange-Id: Ida92b9a2e247f543a948a75d221fbc0038dea66c\n"
    },
    {
      "commit": "9ba7192c1f3a8fd4c1e9590ae07046242e02c239",
      "tree": "1cbfcccd30ae061b8e90e97f0867441f825ec61c",
      "parents": [
        "077135b18c830d46d753a8d09b81b01a154d006d"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jul 21 18:56:55 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 09 15:12:19 2016 -0700"
      },
      "message": "Improve RefBase documentation, especially for clients.\n\nAdd basic interface documentation to RefBase.h.\n\nMuch, but not all, of this is cut-and-pasted from an email message\nfrom Mathias Agopian. The rest is reconstructed from the code.\n\nDelete some, now redundant, text from Refbase.cpp, and add a bit\nmore about the implementation strategy.\n\nSome minor fixes to internal comments.\n\nBug: 30292291\nChange-Id: I56518ae5553bc6de0cc2331778e7fcf2e6c4fd87\n"
    },
    {
      "commit": "7f27cbc3f4583e13a2a48e8148cbdfc0abc43af8",
      "tree": "3dbd1995c23b18f78ccf44e918eb0ca87bf82f88",
      "parents": [
        "02ccdc5db9bb39488a3fe22a907b3211c3a464b9"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jul 29 14:39:10 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jul 29 14:39:10 2016 -0700"
      },
      "message": "Fix race bug in attemptIncStrong\n\nThe compensating onLastStrongRef call could be made even when there\nwas no onIncStrongAttempted call to compensate for.  This\nhappened in the OBJECT_LIFETIME_STRONG case when e.g. curCount\nwas initially zero, but was concurrently incremented by another\nthread.\n\nI believe the old code was also incorrect in the\ncurCount \u003d INITIAL_STRONG_VALUE + 1 case,\nwhich seems to be possible under unlikely conditions.\nIn that case, I believe the compensating call IS needed.\nThus the condition was also changed.\n\nBug: 30503444\nChange-Id: I44bcbcbb1264e4b52b6d3750dc39b041c4140381\n"
    },
    {
      "commit": "e263e6c6337a24d56dc803792206e54981ad53a5",
      "tree": "40df67e22f19ed6a84c44694f7c871c1a4f6c0ff",
      "parents": [
        "c5016de66b6d778dd7c292e215aad6b5c079e92c"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 11 18:15:12 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue May 17 16:11:11 2016 -0700"
      },
      "message": "Fix memory order and race bugs in Refbase.h \u0026 RefBase.cpp\n\nConvert to use std::atomic directly.\n\nConsistently use relaxed ordering for increments, release ordering\nfor decrements, and an added acquire fence when the count goes to\nzero.\n\nFix what looks like another race in attemptIncStrong:\nIt seems entirely possible that the final adjustment for\nINITIAL_STRONG_VALUE would see e.g. INITIAL_STRONG_VALUE + 1,\nsince we could be running in the middle of another initial\nincrement.\n\nAttempt to somewhat document what this actually does, and\nwhat\u0027s expected from the client. Hide the documentation in\nthe .cpp file for now.\n\nRemove a confusing redundant test in decWeak. OBJECT_LIFETIME_STRONG\nand OBJECT_LIFETIME_WEAK are the only options, in spite of some\nof the original comments.\n\nIt\u0027s conceivable that either of these issues has resulted in\nactual crashes, though I would guess the probability is small.\nIt\u0027s hard enough to reason about this code without the bugs.\n\nBug: 28705989\nChange-Id: I4107a56c3fc0fdb7ee17fc8a8f0dd7fb128af9d8\n"
    },
    {
      "commit": "1c563d96f000876d77b2d33fbfb03c241bc503e1",
      "tree": "2b4938eda86ade588cc77bbee202075d3f659bb4",
      "parents": [
        "3abd03232efd53bb3a73d1e76f6f72754457e18d"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Apr 29 15:44:04 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Apr 29 15:44:04 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\nBug: 28341362\nChange-Id: I4504e98a8db31e0edcbe63c23f9af43eb13e9d86\n"
    },
    {
      "commit": "e7aa2b2c8378b458345477d1f6d9904490263bb6",
      "tree": "125b6116858579422945357b40930b5738a94eab",
      "parents": [
        "d1ec9c450d8dc9d24b5f0254111449ecfcbeaea6"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Mar 02 14:02:55 2016 -0800"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Mar 07 18:40:40 2016 -0800"
      },
      "message": "Cleanup uses of sprintf so we can deprecate it.\n\nAlso cleans up two instances of open() with useless mode params, and\nchanges a few uses of snprintf to use sizeof(buffer) instead of\nhardcoded buffer sizes.\n\nChange-Id: If11591003d910c995e72ad8f75afd072c255a3c5\n"
    },
    {
      "commit": "5bed8036644f552210a7cfcbed2d6d20cf2981b0",
      "tree": "37f784e181086e99b17e00d46b6da30529751539",
      "parents": [
        "bf0f25905b12581f05b65b1ebe95211c727ae483"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Apr 30 11:10:46 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jun 02 15:57:50 2014 -0700"
      },
      "message": "libutils: turn on -Werror\n\n- Deal with some -Wunused issues\n- Override PRI macros (windows)\n- Revert use of PRI macros on off64_t (linux)\n- Deal with a gnu++11 complaince issue\n\nChange-Id: Ie66751293bd84477a5a6dfd8a57e700a16e36964\n"
    },
    {
      "commit": "55e0f1c8bdb5d7299ba0c79e084b7ac749eb4c3b",
      "tree": "985adfc219f738ebfc66f7204896b36fc613a34f",
      "parents": [
        "e7f3cce7aa1e51f904f80df02d8d0fe5fe85e14e"
      ],
      "author": {
        "name": "Ian McKellar",
        "email": "ianloic@google.com",
        "time": "Mon Mar 31 15:59:31 2014 -0700"
      },
      "committer": {
        "name": "Ian Mckellar",
        "email": "ianloic@google.com",
        "time": "Tue Apr 01 15:02:57 2014 -0700"
      },
      "message": "Fix stack trace logging in RefBase.\n\nThis was broken about 5 months ago in change I78435ed49aa196a0efb45bf9b2d58b62c41737d3.\nSee: https://goto.google.com/jhtss\n\nChange-Id: Icc32993552efed3015bc1b79a7bd872d7510e020\n"
    },
    {
      "commit": "d98e07fdf9c338589f263c47ce5c844ed43efad5",
      "tree": "d4ff9849df225df1e4c46386fdabe30407ba5513",
      "parents": [
        "be06210c508d5878dcc7d185e5613f4c7e38dfe8"
      ],
      "author": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Fri Aug 02 14:40:08 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Fri Aug 02 14:40:08 2013 -0700"
      },
      "message": "move libs/utils to libutils\n\nChange-Id: I6cf4268599460791414882f91eeb88a992fbd29d\n"
    },
    {
      "commit": "9eb2a3b1c0cc1ff3082a9283e24c8babc112f56b",
      "tree": "f88a03d8dd28a8f641be1c2eac57a42f0a11e599",
      "parents": [
        "19159f90020c04ac2f4dcb39424d740f765ed9a3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 06 20:20:50 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "libutils clean-up\n\nChange-Id: I6ff4cfc736751de2912c697f954e45e275f2d386\n"
    },
    {
      "commit": "d34a8cad1efa1c8da1c7b5ad81226b822064cf73",
      "tree": "232169b5cab9d411190c45aec246dd7b935df82f",
      "parents": [
        "da8ec4b634ffc165fc12f8ae2671d61e684bd248"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 21 17:12:40 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "improved CallStack a bit\n\n- added a ctor that updates and dumps the stack immediately\n- added a \"logtag\" parameter to dump()\n\nChange-Id: Ie51c256071d282591752243bdb4f68cf9ff8829d\n"
    },
    {
      "commit": "da8ec4b634ffc165fc12f8ae2671d61e684bd248",
      "tree": "7024ef2682886d1c427303170c0f68a3bc9b8a52",
      "parents": [
        "6cd548c7154c1633a0ed318c31dd22c50a5f5d02"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Mar 19 17:36:57 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "disable RefBase consistency checks (NDEBUG)\n\nBug: 8328715\nChange-Id: Ib57646ff909fd8744610f37f3b50d90d884dff31\n"
    },
    {
      "commit": "6cd548c7154c1633a0ed318c31dd22c50a5f5d02",
      "tree": "ce9928ccfb45dac23ead4ddae0da0253b0cdd2fe",
      "parents": [
        "6d4419d9b130719dd2355861907dc8f87368a51c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 18 22:27:41 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "Fix a crasher with RefBase debugging and vectors of wp\u003c\u003e\n\nbackground:\nwe have some code to fix-up the IDs of references when\nusing RefBase\u0027s DEBUG_REFS when those refs are managed by\narrays wp\u003c\u003e or sp\u003c\u003e (this is because wp\u003c\u003e / sp\u003c\u003e don\u0027t have\na trivial ctor when DEBUG_REFS is enabled, and Vector\ntreats them as trivial for obvious performance reasons)\n\nthis is complicated by the fact that we don\u0027t want to have\nto recompile everything when enabling DEBUG_REFs (i.e.: the\nVector code cannot know wheter it\u0027s enabled or not for its\ntemplate stuff).\n\nproblem:\nthere was a bug in the fix-up code for wp\u003c\u003e which was trying\nto access the weakref_impl from the RefBase* however, this was\nmoronic since RefBase could have been destroyed if there wasn\u0027t\nany more strong refs -- and this happned. Instead we need to get\nthe weakref_impl directly from the wp\u003c\u003e\n\nChange-Id: Ie16e334204205fdbff142acb9faff8479a78450b\n"
    },
    {
      "commit": "6d4419d9b130719dd2355861907dc8f87368a51c",
      "tree": "7b6e0e3ffb1d7b45a1205720f65991f29ae901d4",
      "parents": [
        "b73559d86c9017166da28e1d59a884f13417426d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 18 20:31:18 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "A few tweaks to RefBase debugging\n\n- stacks are now saved in /data/debug which must be\n  created and writable by the user.\n\n- removed \"always fatal\" DEBUG_REFS option, it wasn\u0027t\n  really needed.\n\n- DEBUG_REFS_ENABLED_BY_DEFAULT is not the default anymore\n  (usually people want to target which refs they\u0027re tracking)\n\nChange-Id: I37fae72e9dacde6ce1fa8f7dbe2bc01b1a1b95e5\n"
    },
    {
      "commit": "a729ab1e3be17ed20073f7c035df0433888164d6",
      "tree": "fa70ca013c9a559ffd4a1d88dc3f3d873ebc07e5",
      "parents": [
        "8a4cdbcdb935554a660c78e20686afdad8e8ca75"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Mar 14 15:26:30 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "fix a couple race-conditions in RefBase::promote()\n\nBug: 8390295\nChange-Id: I7a48e3bf5b213cc1da2b8e844c6bb37ee24cb047\n"
    },
    {
      "commit": "8a4cdbcdb935554a660c78e20686afdad8e8ca75",
      "tree": "d959875986b3e1493bef690833df09d99bc7129b",
      "parents": [
        "31ba37f1c80801ee128749d4772c47f23323a3be"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 11 21:27:16 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "temporary: enable ASSERTs in RefBase\n\nthis is in an attempt to get more data on\nbug 8328715.\n\nChange-Id: I9333a67c2d7f67f4d9b2fc5eb1ad8a7b2d1c6dcb\n"
    },
    {
      "commit": "769828d2d44fca3829e628bb424aa426aa468ee9",
      "tree": "c3f5773e46734cb471575de9986476a50ac212e1",
      "parents": [
        "ca3e2a276afa03cfffb2b989e28adfc44ec50d6f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Mar 06 17:51:15 2013 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:00 2013 -0700"
      },
      "message": "Fix RefBase debugging. O_CREAT must specify the mode.\n\nChange-Id: I51c6df3cfd59b20ca73c3edee86bc2f74dbde1b1\n"
    },
    {
      "commit": "ae07445e9793724324b93bb593fe20be2a386707",
      "tree": "21b2375319af1a9810b23628351d8d6863de837c",
      "parents": [
        "1b781ab0e0e8d59a7a8d1140bf6dee96a48a160c"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Mon Jan 09 18:35:44 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename LOG_ASSERT to ALOG_ASSERT  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157519\n\nBug: 5449033\nChange-Id: I8ceb2dba1b031a0fd68d15d146960d9ced62bbf3\n"
    },
    {
      "commit": "1b781ab0e0e8d59a7a8d1140bf6dee96a48a160c",
      "tree": "3714a0510c545d8420a0b9e33c6328fe0ca63aa4",
      "parents": [
        "61d341b8d3d771f4ef3dd54df0502b19b7a2ab4d"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\n"
    },
    {
      "commit": "eb0953307ce75cec031aedbf21abff08e5a737e5",
      "tree": "f68629af933e04983e26db5503983990de9b2881",
      "parents": [
        "53ddace1a585c0515ea1c2e2091c4a8cd3a94864"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "b37fbe9f810545bf62468fea5958325caa3635be",
      "tree": "948cb4f6c9742003740e5a53655d5446e9312463",
      "parents": [
        "8b4cf779b29144d6d469afb4daabcbf069725db2"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Oct 20 11:56:00 2011 +0100"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/143865\n\nBug: 5449033\nChange-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a\n"
    },
    {
      "commit": "ad09965050f8226fda6f5238db060ce65abaa71c",
      "tree": "ea9fe13c4be2839f0677ea8f7a4392053518892c",
      "parents": [
        "c3a5225d4ec0e98ca671ada8cba17878c656e3d5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Aug 10 21:07:02 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "fix a memory leak and memory corruption in RefBase\n\nwe would leak a weakref_impl if a RefBase was never incWeak()\u0027ed.\nthere was also a dangling pointer that would cause memory corruption\nand double-delete when a custom destroyer was used to delay the\nexecution of ~RefBase.\n\nit turns out that the custom destroyer feature caused most of the\nproblems, so it\u0027s now gone. The only client was SurfaceFlinger\nwho now handles things on its own.\n\nRefBase is essentially back its \"gingerbread\" state, but the\ncode was slightly cleaned-up.\n\nBug: 5151207, 5084978\nChange-Id: Id6ef1d707f96d96366f75068f77b30e0ce2722a5\n"
    },
    {
      "commit": "9c8fa9ed4111c69c82ace01c8a7ac3beeacdce78",
      "tree": "f04e23041d0b4dd0c2585bd8f461061652d8d4d5",
      "parents": [
        "267ba69c2e4ae39b9fe98d4be592c7b59e7e57a1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:42:47 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)\n\nThis reverts commit 52a43990880b27808bcf562afcc4209d34728e6e.\n\nChange-Id: I1856a48f863b051395b8091ddfd1e01292fa1b1e\n"
    },
    {
      "commit": "267ba69c2e4ae39b9fe98d4be592c7b59e7e57a1",
      "tree": "ec1160244d799eab869ab7f65aabe26943df4ef2",
      "parents": [
        "dace0b45d00814dda275d81b82c1673dd88cf3e9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:41:24 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Revert \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\"\n\nThis reverts commit af6edba59e250adbdfa5b3c3be134f70d8c38a16.\n\nChange-Id: I7793d3ca8a4d20a2b188364f47854328ab5f586d\n"
    },
    {
      "commit": "dace0b45d00814dda275d81b82c1673dd88cf3e9",
      "tree": "f04e23041d0b4dd0c2585bd8f461061652d8d4d5",
      "parents": [
        "0151ac8945216bb6c7ae23b6a7e449e5ede8a69c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 19:20:52 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom\n\nBug: 4600244\nChange-Id: Ia68ebf0f243a051ff6a21b3863e3e5d259bbf7ac\n"
    },
    {
      "commit": "9b6259aa579291deb7334a968bd30878a5fec386",
      "tree": "fe824d4cba3dc2b8c8fabb06948ccc9801b1e74c",
      "parents": [
        "a538e268e653d8fa1ea27659f507bc0ce5ceead0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\nBug: 4595257\nChange-Id: I1db83149107d7dab1f0b7e73c684e0ff82e17e62\n"
    },
    {
      "commit": "4571143fd31f03a63e7d251b28bb58f2c8b584e0",
      "tree": "60d1ea6fd629f0e4611433ba5a321671358a488a",
      "parents": [
        "7c9f673ed619f0054dc6de45ac9c9396112c30d4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 16:05:30 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix a leak in RefBase (DO NOT MERGE)\n\nthis bug was introduced recently. it caused RefBase\u0027s weakref_impl\nstructure to be leaked for every RefBase object (about 20 bytes).\n\nChange-Id: Ia9b155fbfa643ef72cfb8129e96260a3b806a78c\n"
    },
    {
      "commit": "2be848de6b7041da7f335a1053cbfbf841a5d1e3",
      "tree": "8d66cb55e2fcf7a2c7bbd47f144416d01fbf80a0",
      "parents": [
        "d781137601c05b623305592fbbe7b2d7d69087dd"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 20:41:27 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Call RefBase::destroy() when OBJECT_LIFETIME_* is not the default\n\nChange-Id: Ifb2069e095dba57b7d97e9f2d942fd85fa975f58\n"
    },
    {
      "commit": "d781137601c05b623305592fbbe7b2d7d69087dd",
      "tree": "88a065a261a10f9915618a003b03cf4c3a92ac4f",
      "parents": [
        "23138b63df8788333f09a468cce36fd76d562577"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "RefBase subclasses can now decide how they want to be destroyed.\n\nThis adds a destroy() virtual on RefBase which\nsublasses can implement. destroy() is called\nin lieu of the destructor whenthe last strong\nref goes away.\n"
    },
    {
      "commit": "8bb27951f592713bcb2c0e6605d89da665131637",
      "tree": "25e7f2513b03c4209b0a7f1daf336f26b0a2a3b3",
      "parents": [
        "aa13c1b90e5d9cae064bb425dd094ccbd411e073"
      ],
      "author": {
        "name": "Josh Stone",
        "email": "cuviper@gmail.com",
        "time": "Fri Apr 22 11:13:35 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "libutils: Fix an improper const-cast in RefBase\n\nUnder Fedora 15 Beta, gcc 4.6.0 warns:\n\n  frameworks/base/libs/utils/RefBase.cpp: In member function\n    ‘void android::RefBase::weakref_type::trackMe(bool, bool)’:\n  frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing\n    ‘const android::RefBase::weakref_impl’ as ‘this’ argument of\n    ‘void android::RefBase::weakref_impl::trackMe(bool, bool)’\n    discards qualifiers [-fpermissive]\n\ntrackMe is not a const function, so don\u0027t use const in the static_cast\nto a weakref_impl pointer.\n\nChange-Id: I3c9ba73eb127985f5f54197ffecf2939c50f632c\n"
    },
    {
      "commit": "7332f80db5b942253f69b9b2e6cc3ae08d957d0e",
      "tree": "eb51d063b42cbe247c0216337318f6b7a80fd204",
      "parents": [
        "3e0f87541f7871ffde51c722d54550774fe1b7c3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:11:44 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix sp\u003c\u003e conversion operator / constructor\n\nsome of the conversion operators were not using the proper\npointer type when calling incStrong/decStrong, usually it\nhas no bad consequences, but for some implementation\nof the ref-counted object it could lead to recording the wrong\nowner id.\n\nChange-Id: If574b9069b8a4cf6e0911a992c8f095aba799995\n"
    },
    {
      "commit": "b26ea8b30f11cf0ad11ac7983208514a1bfafb75",
      "tree": "ce7599f183785ee8caccfa83b0a19283f500e761",
      "parents": [
        "966a48f3e78e75c3a4f3a2f23b98e970f06bf983"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 20:23:43 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix some issues with RefBase debugging.\n\nFirst slipt sp\u003c\u003e out of RefBase into StrongPointer.h so it can be reused\nmore easily and to make it clear that it doesn\u0027t require RefBase.\n\nNote: the rest of the change only affects the system when DEBUG_REFS is enabled.\n\nThe main problem we fix here is that the owner id associated with each\nreference could get out of date when a sp\u003c\u003e or wp\u003c\u003e was moved, for\ninstance when they\u0027re used in a Vector\u003c \u003e.\n\nWe fix this issue by calling into RefBase::moveReferences from\na template specialization for sp\u003cTYPE\u003e and wp\u003cTYPE\u003e of the\ntype helpers. RefBase::moveReferences() has then a chance to\nupdate the owner ids.\n\nThere is a little bit of trickery to implement this generically in\nRefBase, where we need to use a templatized functor that can turn\na sp\u003cTYPE\u003e* casted to a void* into a RefBase*.\n\nIntroduced a new debug option DEBUG_REFS_FATAL_SANITY_CHECKS\ncurrently set to 0 by default as there seem to be an issue\nwith sp\u003cANativeWindow\u003e which trips the sanity checks.\n\nChange-Id: I4825b21c8ec47d4a0ef35d760760ae0c9cdfbd7f\n"
    },
    {
      "commit": "84a23fa4a9a2dca0f53fae2283b57fff988d1c74",
      "tree": "5991d8c7dd73ace2abd9df291972dd1c70a02cf1",
      "parents": [
        "dafff0bcc10fe1ff80e68a31793bbdea2ec8d0c3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 15:23:08 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Remove RefBase.h dependency on TextOutput.h\n\nChange-Id: I72cd6b98ef82b4868fe1c8ec87862cf43fb4ee73\n"
    },
    {
      "commit": "cbb1011c95e0c25c29e40e203a6a31bccd029da3",
      "tree": "4697a3a86867bf33c2d9dd4e4a2743d3eb947523",
      "parents": [
        "cf59fa8dc7ddca5a172860223b06afed5d4ec0e0"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "cf59fa8dc7ddca5a172860223b06afed5d4ec0e0",
      "tree": "e780750523e4f032abf902a0e6ff8b9d52c54e54",
      "parents": [
        "7aa707a5d654b7af67b133955c454c8e23a12abc"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d245d1d09731d6a19e8a25559d3907f54441ac3d",
      "tree": "b79df48666f286bd33efb4ffdbf4b3fa28f5dd91",
      "parents": [
        "13f4c9fb279f1b34a3b47a6eac80b8a09d2d3a79"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:46 2013 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
