)]}'
{
  "log": [
    {
      "commit": "e04f826fef44b85108be85fb6d3a16c35a9e5c29",
      "tree": "13afd43678741a6439d23a966950cd7c6d40bdaa",
      "parents": [
        "a27ad3cca3f17e394ce96011422a0131c15939a9"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jun 15 20:41:15 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jun 15 20:55:49 2011 -0700"
      },
      "message": "Use rand() for MinGW\n\nThe version of MinGW we use doesn\u0027t have nrand48() which is really lame,\nbut we need to use libutils in the Windows SDK.\n\nChange-Id: If854c03dbf02bc29e79f49e4539f08c2bf057517\n"
    },
    {
      "commit": "f1df0407c6c399cdc9e222efe2d50176d7853100",
      "tree": "a134fb5b75f7d3fb0a742082d4d748cc30a8f879",
      "parents": [
        "2714abff5cc50b1487c0979c99cc685f5ea113b1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 14 11:50:22 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 14 11:50:22 2011 -0700"
      },
      "message": "may fix build on some version of gcc\n\nChange-Id: Ia88787c0432ec84d51fe505fd6a2b6f98ebe8f33\n"
    },
    {
      "commit": "eb99f0d9f05dd37f988a815e6bc01bbd7152c31a",
      "tree": "eab0217d74f5887e680f0dbc57aca49acba2913a",
      "parents": [
        "a934219ca8d23a63e5a9f443fafd6d4ac9847c71"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 18:39:45 2011 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread\n\nBug: 4595257\nChange-Id: I0d5e10f497e3f39868bff58f6ded510c38b44b12\n"
    },
    {
      "commit": "dfc7958a2eafba52db90743a4707eed1d780b63b",
      "tree": "842497b93890e32563cf187ec4060bf7ff1121d3",
      "parents": [
        "fde45f58644c351ad9f662bc272fc5ac57d9c6a9",
        "9539d9f65a28b676e0a03322ad848b24786a515d"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Jun 13 12:32:46 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 13 12:32:46 2011 -0700"
      },
      "message": "Merge \"libutils: add a binary blob cache implementation.\""
    },
    {
      "commit": "041120754aa59ddd28927fa6c5db0c90bb8f5e95",
      "tree": "6e2bc633ab17347da11c06ebaffaf1b33f81d6fe",
      "parents": [
        "622d5441975fa16636d3304d42d27659af14cb49",
        "9dbd7d818916dca77e53ababdaf05311d5c7bce2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 13 10:30:29 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 13 10:30:29 2011 -0700"
      },
      "message": "Merge \"Remove redundant memory barrier\""
    },
    {
      "commit": "9dbd7d818916dca77e53ababdaf05311d5c7bce2",
      "tree": "bfabae474c823f0772712a322265af2d980959ef",
      "parents": [
        "679dd99cdce72683816e6ac75e4f0e68ca6ad51c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 02 08:59:28 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 10 17:07:46 2011 -0700"
      },
      "message": "Remove redundant memory barrier\n\npthread_create already includes the necessary memory barriers:\n - parent at pthread_create : pthread_mutex_unlock(start_mutex)\n - child at __thread_entry : pthread_mutex_lock(start_mutex)\n\nAdd lock around uses of mThread.\n\nAdded comments:\n - uses of mThread require lock\n - androidCreateRawThreadEtc returned ID is not safe for direct use from non-parent threads.\n\nChange-Id: I18cb296b41ddaf64cf127b57aab31154319b5970\n"
    },
    {
      "commit": "6b592723c9a9fc816a8ab75c935e8cd20ff65a0e",
      "tree": "00b93945a1c8051172316575208f14c355e663c3",
      "parents": [
        "08b992c88e60a95b629a70cd197b3d3b9b27fb8d",
        "f51ded0f8f593d17af82946eb65c05fc04f688b4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 10 12:45:36 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 10 12:45:36 2011 -0700"
      },
      "message": "resolved conflicts for merge of f51ded0f to master\n\nChange-Id: Ida356524a68aeb2b9b0013dfbb6ab4bd11e616e2\n"
    },
    {
      "commit": "f51ded0f8f593d17af82946eb65c05fc04f688b4",
      "tree": "32b39d7d93170aed01c11e7353afc53a2b306cb4",
      "parents": [
        "5a8455c3c625201f3ae6b9ce32913bf97ba61cc8",
        "a8d7ea067cf22baeee2ff0a33e5a8c5a35936942"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 16:06:07 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 09 16:06:07 2011 -0700"
      },
      "message": "am a8d7ea06: am 220cd77d: Merge \"Enforce public resource restriction on bag parents.\" into honeycomb-mr2\n\n* commit \u0027a8d7ea067cf22baeee2ff0a33e5a8c5a35936942\u0027:\n  Enforce public resource restriction on bag parents.\n"
    },
    {
      "commit": "426431adcc220b6adfbe1d9530247f897e60fa36",
      "tree": "e9dd34ae5151de5bf9f57edb3055d0d228e1f006",
      "parents": [
        "1d3173c3dc93bb4f2efc5b059fec8e7577b3258a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 11:29:08 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 15:27:39 2011 -0700"
      },
      "message": "Enforce public resource restriction on bag parents.\n\nNeed to put some more styles in the SDK to avoid breaking apps.\n\nAlso, welcome Android 3.2.\n\nChange-Id: Ia31d07c9b1b91ad868d8630437fdc1b5ae24f37d\n"
    },
    {
      "commit": "24855c09173a6caaec7dcedd0c2d7ce15121d39b",
      "tree": "1b72c39ca375da3f4c43ba5afcf9cde70dd7a53d",
      "parents": [
        "b16b020dd32147fbaaf7de47d5de16bfee10967a"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 06 15:14:25 2011 -0700"
      },
      "message": "merge various SF fixes from gingerbread to honeycomb-mr2 (DO NOT MERGE)\n\n  Fix a race that could cause GL commands to be executed from the wrong thread.\n  RefBase subclasses can now decide how they want to be destroyed.\n  Fix a race in SurfaceFlinger that could cause layers to be leaked forever.\n  Fix a race-condtion in SurfaceFlinger that could lead to a crash.\n\ninitial cherry-pick:\nresolved conflicts for merge of b9783b49 to honeycomb-plus-aosp\n\nChange-Id: I2a335e03fff219e35c18a7b0089b3a11d636576f\n"
    },
    {
      "commit": "b2fd84ad1d470d607af4a83da378d4e317421634",
      "tree": "7f3004f80d6e46b33317676d8d11b79aa3c6bb69",
      "parents": [
        "fc51aaec82ecedb554d158e4284761c9348d09fd",
        "b9783b49f4727a0365f2297bb903db8682855adf"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "message": "resolved conflicts for merge of b9783b49 to honeycomb-plus-aosp\n\nChange-Id: I1d86ea56b3d1d1b69f6671e5b0df0ca3f0c79643\n"
    },
    {
      "commit": "8a7d44e8248cf7078da6094068b039dacc0a3971",
      "tree": "dbb6847bc8af2033321069e3ff1a2e0506f0ba14",
      "parents": [
        "0e5e16a656b0002f377f1bcda2e43a97206e4046",
        "54cb63e26e41b80c013b8665878b9c7c7fb328c1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 02 16:44:52 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 02 16:44:52 2011 -0700"
      },
      "message": "resolved conflicts for merge of 54cb63e2 to master\n\nChange-Id: I5b741a1781e3f76c03fc1534ffce871117effd10\n"
    },
    {
      "commit": "0e5e16a656b0002f377f1bcda2e43a97206e4046",
      "tree": "8559a3390986053feb375f09caa34439da7271ab",
      "parents": [
        "2170a992daa97c25fc9c5f946a63121b3bee9a35",
        "da9837fb61c8aa53c67921682016d97655332089"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 02 16:24:12 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 02 16:24:12 2011 -0700"
      },
      "message": "am da9837fb: am c058d386: am ff762299: Merge \"Small fixes and cleanup of resource config handling.\" into honeycomb-mr2\n\n* commit \u0027da9837fb61c8aa53c67921682016d97655332089\u0027:\n  Small fixes and cleanup of resource config handling.\n"
    },
    {
      "commit": "54cb63e26e41b80c013b8665878b9c7c7fb328c1",
      "tree": "a3c15960d5aef66a6df3370cb5ad0b12a9fa1dee",
      "parents": [
        "da9837fb61c8aa53c67921682016d97655332089",
        "528c49f112dce5f9687f30a9751e783196eca0c6"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 14:27:46 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 27 14:27:46 2011 -0700"
      },
      "message": "am 528c49f1: am b96cbbd1: Add \"tv\" density for 720p screens.\n\n* commit \u0027528c49f112dce5f9687f30a9751e783196eca0c6\u0027:\n  Add \"tv\" density for 720p screens.\n"
    },
    {
      "commit": "b96cbbd11c4590bec846212c33361e02293f18b5",
      "tree": "ac02f12136339bb608c07d8b26eaae1cddccf792",
      "parents": [
        "ff7622992f39d8e401ab23c5ce6a84f318906e52"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 13:40:26 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 13:40:26 2011 -0700"
      },
      "message": "Add \"tv\" density for 720p screens.\n\nChange-Id: I028969b007f2fceea66947d77a2ae31ef1d1a630\n"
    },
    {
      "commit": "da9837fb61c8aa53c67921682016d97655332089",
      "tree": "5b6771f3f923114dc942c98b5498098c2c593f3f",
      "parents": [
        "ef9be207152d54cbc1382121053e25414b3b2ed3",
        "c058d38602a1ffe00e14b4ab32c876c252eabe6d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 12:47:59 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 27 12:47:59 2011 -0700"
      },
      "message": "am c058d386: am ff762299: Merge \"Small fixes and cleanup of resource config handling.\" into honeycomb-mr2\n\n* commit \u0027c058d38602a1ffe00e14b4ab32c876c252eabe6d\u0027:\n  Small fixes and cleanup of resource config handling.\n"
    },
    {
      "commit": "3904d03dd01dcd43c446744e44b34615825d9679",
      "tree": "90a8c911753fe69f0ab5bbfe273c08c086f8839d",
      "parents": [
        "94250ac69c6e07534e4781d3479dccb79d8c366c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 12:09:11 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 12:09:11 2011 -0700"
      },
      "message": "Small fixes and cleanup of resource config handling.\n\nChange-Id: I402c31b68f2b4825cb4c610a65ee8e1da471c7bb\n"
    },
    {
      "commit": "8e5799ed16ab605d8de775e1644f1fa59ff6627e",
      "tree": "cc7f1fd4b865123a2ee50ddebd628004e186112f",
      "parents": [
        "7d0fb57044576fd4bbaf9683997bab288c3b759c",
        "af685f3bb566f297deee1615d55d4f33d5580ba3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 25 14:42:20 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 25 14:42:20 2011 -0700"
      },
      "message": "am af685f3b: am 85a7f99c: Merge \"Refactor how timeouts are calculated. (DO NOT MERGE)\" into honeycomb-mr2\n\n* commit \u0027af685f3bb566f297deee1615d55d4f33d5580ba3\u0027:\n  Refactor how timeouts are calculated. (DO NOT MERGE)\n"
    },
    {
      "commit": "7d0fb57044576fd4bbaf9683997bab288c3b759c",
      "tree": "e5a83713aaaf0d82170bba4da24f32b5f7465f39",
      "parents": [
        "4e3ba25cc718bbc6db0a332c4105debc4b3552d3",
        "16330e249663fed890df0e95fce4016c2971120a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 25 14:42:06 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 25 14:42:06 2011 -0700"
      },
      "message": "am 16330e24: am 94e838f6: Merge \"Improve VelocityTracker numerical stability. (DO NOT MERGE)\" into honeycomb-mr2\n\n* commit \u002716330e249663fed890df0e95fce4016c2971120a\u0027:\n  Improve VelocityTracker numerical stability. (DO NOT MERGE)\n"
    },
    {
      "commit": "4e3ba25cc718bbc6db0a332c4105debc4b3552d3",
      "tree": "41ea26bf7a101268ac614d362393b7bd2705f4fb",
      "parents": [
        "cfb046dead49568de6f6808a697e0508ef39a3a6",
        "4bd89fb00f319c5d6d4f17b39fd4c0b3dc827ad1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 25 14:42:01 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 25 14:42:01 2011 -0700"
      },
      "message": "am 4bd89fb0: am 82e4373e: Merge \"Use touch pad gestures to manipulate the pointer. (DO NOT MERGE)\" into honeycomb-mr2\n\n* commit \u00274bd89fb00f319c5d6d4f17b39fd4c0b3dc827ad1\u0027:\n  Use touch pad gestures to manipulate the pointer. (DO NOT MERGE)\n"
    },
    {
      "commit": "b9783b49f4727a0365f2297bb903db8682855adf",
      "tree": "0d4831587eed29e6e2366280543ed0f226051807",
      "parents": [
        "10b364b4bea8537f955bbbb8b9b40061264b29c9",
        "c9cd2387b6938a6fbefc731d2177902266f2a130"
      ],
      "author": {
        "name": "Simon Wilson",
        "email": "simonwilson@google.com",
        "time": "Tue May 24 17:29:12 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 24 17:29:12 2011 -0700"
      },
      "message": "am c9cd2387: Merge changes I37f0f315,I8cbf6044,Ibb598931,I5262bf11 into gingerbread\n\n* commit \u0027c9cd2387b6938a6fbefc731d2177902266f2a130\u0027:\n  Fix a race that could cause GL commands to be executed from the wrong thread.\n  RefBase subclasses can now decide how they want to be destroyed.\n  Fix a race in SurfaceFlinger that could cause layers to be leaked forever.\n  Fix a race-condtion in SurfaceFlinger that could lead to a crash.\n"
    },
    {
      "commit": "e2c7715c772d5121397591b532d04a31b3ffcc99",
      "tree": "a528b89349ba2b367aeae8b442b5c696a7c8c99e",
      "parents": [
        "6895c4994350bc10a06481ecf42c4ba8abb3eedb",
        "bbca81334e3603c7328dc526bd63032b23d5261d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 24 11:27:11 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 24 11:27:11 2011 -0700"
      },
      "message": "resolved conflicts for merge of bbca8133 to master\n\nChange-Id: I81493674dceab848e41d380a77a37e5a9be06db6\n"
    },
    {
      "commit": "68d6075b4ad2205c10064c78cde552e3210cca91",
      "tree": "a8f8e79d5bddb76dd0578a02c17646a05021bbd9",
      "parents": [
        "5b2b4d9c0a56c4b5e869c828a6c36a1b9e27d61b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:20:42 2011 -0700"
      },
      "message": "Refactor how timeouts are calculated. (DO NOT MERGE)\n\nAdded a timeout mechanism to EventHub and InputReader so that\nInputMappers can request timeouts to perform delayed processing of\ninput when needed.\n\nChange-Id: I89c1171c9326c6e413042e3ee13aa9f7f1fc0454\n"
    },
    {
      "commit": "5b2b4d9c0a56c4b5e869c828a6c36a1b9e27d61b",
      "tree": "0e00adeba7368949783dd598b57b70a4936f8e9b",
      "parents": [
        "96ad3979f328a1aa098917ca1c35575e85345526"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 19:39:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:19:59 2011 -0700"
      },
      "message": "Improve VelocityTracker numerical stability. (DO NOT MERGE)\n\nReplaced VelocityTracker with a faster and more accurate\nnative implementation.  This avoids the duplicate maintenance\noverhead of having two implementations.\n\nThe new algorithm requires that the sample duration be at least\n10ms in order to contribute to the velocity calculation.  This\nensures that the velocity is not severely overestimated when\nsamples arrive in bursts.\n\nThe new algorithm computes the exponentially weighted moving\naverage using weights based on the relative duration of successive\nsample periods.\n\nThe new algorithm is also more careful about how it handles\nindividual pointers going down or up and their effects on the\ncollected movement traces.  The intent is to preserve the last\nknown velocity of pointers as they go up while also ensuring\nthat other motion samples do not count twice in that case.\n\nBug: 4086785\nChange-Id: I95054102397c4b6a9076dc6a0fc841b4beec7920\n"
    },
    {
      "commit": "96ad3979f328a1aa098917ca1c35575e85345526",
      "tree": "a703eeeda8430c955738efd047616bc6a47a32e1",
      "parents": [
        "40277df7c33c0fc381eec589c768fe86de4b4404"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 17:39:48 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:19:38 2011 -0700"
      },
      "message": "Use touch pad gestures to manipulate the pointer. (DO NOT MERGE)\n\n1. Single finger tap performs a click.\n2. Single finger movement moves the pointer (hovers).\n3. Button press plus movement performs click or drag.\n   While dragging, the pointer follows the finger that is moving\n   fastest.  This is important if there are additional fingers\n   down on the touch pad for the purpose of applying force\n   to an integrated button underneath.\n4. Two fingers near each other moving in the same direction\n   are coalesced as a swipe gesture under the pointer.\n5. Two or more fingers moving in arbitrary directions are\n   transformed into touches in the vicinity of the pointer.\n   This makes scale/zoom and rotate gestures possible.\n\nAdded a native VelocityTracker implementation to enable intelligent\nswitching of the active pointer during drags.\n\nChange-Id: I7b7ddacc724fb1306e1590dbaebb740d3130d7cd\n"
    },
    {
      "commit": "bbca81334e3603c7328dc526bd63032b23d5261d",
      "tree": "c29dd1ed7c2119cd50bbc4e56be9ee36d89891c7",
      "parents": [
        "98a8231e838d7d624c5862d81d1975ef4f8d0d57",
        "4bb78889d04594c01a6af7f6d38c1764e9f575f9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 23 16:16:54 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 23 16:16:54 2011 -0700"
      },
      "message": "am 4bb78889: am 40277df7: Merge \"Add \"television\" mode.\" into honeycomb-mr2\n\n* commit \u00274bb78889d04594c01a6af7f6d38c1764e9f575f9\u0027:\n  Add \"television\" mode.\n"
    },
    {
      "commit": "9e7636681eda094dd328ce9bf54d0b0166be1e67",
      "tree": "daa994e6a3ed671ec6e09e31a8408bd7d6240871",
      "parents": [
        "fa21cb2e58838761157d3ee929a77e23b602bd01"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 23 16:13:48 2011 -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\nBug: 4483050\nChange-Id: I8cbf6044a6fd3f01043a45592b5a60fa1e5fade2\n"
    },
    {
      "commit": "e360bb6bd8ea84b8d37604fc11dfc744b18fb0de",
      "tree": "7e833a630e8108be1345d8595438eea5a30e7173",
      "parents": [
        "1b144e625fb0d34cd680c44cbcfb2deb8a76d4c6"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 20 16:11:04 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 23 15:11:08 2011 -0700"
      },
      "message": "Add \"television\" mode.\n\nChange-Id: Ida1fdb61b036a8b489dbeda196fb4bc82e651b2b\n"
    },
    {
      "commit": "161e67ff3ba26408eea09221734ad2e29a1eed11",
      "tree": "6e98ff836fb5f134e01a7e9ef420ec35a78ad5d2",
      "parents": [
        "9e735541beed238d3b99d4bd284af1fc953c3775",
        "06a8ceacb0dc2713cb0bb2c93d2a750f2a58db68"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 21:44:52 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 21:44:52 2011 -0700"
      },
      "message": "resolved conflicts for merge of 06a8ceac to master\n\nChange-Id: Id51574c825affddfac14ad7214c5496d6a3d6e69\n"
    },
    {
      "commit": "6db8c505398a0979853f6c166e0a8bcafd9268f8",
      "tree": "af906178d8b458e0030034809bccc962bfdd59ac",
      "parents": [
        "14a2935809e73a9d824888dc837f2f017100fd26"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 19:40:01 2011 -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": "06a8ceacb0dc2713cb0bb2c93d2a750f2a58db68",
      "tree": "14cda7bbbdc5e6cabb492d7af1977a2f5548062b",
      "parents": [
        "90177e59e5211dd9ab33761ce800e8a86a49d1e2",
        "c851ea5672f6e042c2e89b2a2ce4a2467e1fcd2a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 19:34:21 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 19 19:34:21 2011 -0700"
      },
      "message": "am c851ea56: am 69cb8757: Add new \"-swNNNdp\" resource qualifier.\n\n* commit \u0027c851ea5672f6e042c2e89b2a2ce4a2467e1fcd2a\u0027:\n  Add new \"-swNNNdp\" resource qualifier.\n"
    },
    {
      "commit": "69cb87576ba163b61bb0e6477a3b7c57a9b11d40",
      "tree": "a44be0af3d008409403be133358bdcd628741c01",
      "parents": [
        "b9537db8d9ee27efb4a98415ad2d6b50c1806e5d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 18:13:32 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 18:23:29 2011 -0700"
      },
      "message": "Add new \"-swNNNdp\" resource qualifier.\n\nChange-Id: I0101e88ca9d8d44138bdcaf571f24b0352f4f6ce\n"
    },
    {
      "commit": "9539d9f65a28b676e0a03322ad848b24786a515d",
      "tree": "5a21ee7567f748fa171a1e566e689afb5dabe04d",
      "parents": [
        "8318561e9a69f692531647fe28deecfee303a1dc"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Apr 28 16:19:45 2011 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Tue May 17 16:58:37 2011 -0700"
      },
      "message": "libutils: add a binary blob cache implementation.\n\nThis change adds an implementation of a cache that stores key/value\npairs of unstructured binary blobs.\n\nChange-Id: Idd01fdabedfa3aed6d359a6efb0592967af52651\n"
    },
    {
      "commit": "2e4a3236a7634d17f89288e9739a438ecbea0471",
      "tree": "45e1c4c61f4eb9775572d94a55dd91b071b84916",
      "parents": [
        "15f8a6a726658bfb195924bd5d7bb86684a22de0",
        "46a282f323bc05606e4fe1eba795bd9ac7c99819"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 13 11:21:26 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 13 11:21:26 2011 -0700"
      },
      "message": "am 46a282f3: am 0ed2e845: Merge \"DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\" into honeycomb-mr2\n\n* commit \u002746a282f323bc05606e4fe1eba795bd9ac7c99819\u0027:\n  DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\n"
    },
    {
      "commit": "ebff8f92f13513ce37bd74759eb1db63f2220590",
      "tree": "909da02ab7ff47483e227f032828dbdbe7f959af",
      "parents": [
        "a8138732a01b92f0a40f72050b74a3bd4cf6d215"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 12 18:07:47 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 12 18:39:51 2011 -0700"
      },
      "message": "DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\n\nYou can now specify resource configuration variants \"wNNNdp\"\nand \"hNNNdp\".  These are the minimum screen width/height in \"dp\"\nunits.  This allows you to do things like have your app adjust\nits layout based only on the about of horizontal space available.\n\nThis introduces a new configuration change flag for screen size.\nNote that this configuration change happens each time the orientation\nchanges.  Applications often say they handle the orientation change\nto avoid being restarted at a screen rotation, and this will now\ncause them to be restarted.  To address this, we assume the app can\nhandle this new config change if its target SDK version is \u003c ICS.\n\nChange-Id: I4acb73d82677b74092c1da9e4046a4951921f9f4\n"
    },
    {
      "commit": "4a627c71ff53a4fca1f961f4b1dcc0461df18a06",
      "tree": "270190b1e030424210b6375ca886c45db10c4fb6",
      "parents": [
        "2bb51bb203c117649db10ad8bd497f199ca797b0"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Apr 01 14:43:32 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue May 10 17:52:51 2011 -0700"
      },
      "message": "Full local backup infrastructure\n\nThis is the basic infrastructure for pulling a full(*) backup of the\ndevice\u0027s data over an adb(**) connection to the local device.  The\nbasic process consists of these interacting pieces:\n\n1. The framework\u0027s BackupManagerService, which coordinates the\n   collection of app data and routing to the destination.\n\n2. A new framework-provided BackupAgent implementation called\n   FullBackupAgent, which is instantiated in the target applications\u0027\n   processes in turn, and knows how to emit a datastream that contains\n   all of the app\u0027s saved data files.\n\n3. A new shell-level program called \"bu\" that is used to bridge from\n   adb to the framework\u0027s Backup Manager.\n\n4. adb itself, which now knows how to use \u0027bu\u0027 to kick off a backup\n   operation and pull the resulting data stream to the desktop host.\n\n5. A system-provided application that verifies with the user that\n   an attempted backup/restore operation is in fact expected and to\n   be allowed.\n\nThe full agent implementation is not used during normal operation of\nthe delta-based app-customized remote backup process.  Instead it\u0027s\nused during user-confirmed *full* backup of applications and all their\ndata to a local destination, e.g. via the adb connection.\n\nThe output format is \u0027tar\u0027.  This makes it very easy for the end\nuser to examine the resulting dataset, e.g. for purpose of extracting\nfiles for debug purposes; as well as making it easy to contemplate\nadding things like a direct gzip stage to the data pipeline during\nbackup/restore.  It also makes it convenient to construct and maintain\nsynthetic backup datasets for testing purposes.\n\nWithin the tar format, certain artificial conventions are used.\nAll files are stored within top-level directories according to\ntheir semantic origin:\n\napps/pkgname/a/  : Application .apk file itself\napps/pkgname/obb/: The application\u0027s associated .obb containers\napps/pkgname/f/  : The subtree rooted at the getFilesDir() location\napps/pkgname/db/ : The subtree rooted at the getDatabasePath() parent\napps/pkgname/sp/ : The subtree rooted at the getSharedPrefsFile() parent\napps/pkgname/r/  : Files stored relative to the root of the app\u0027s file tree\napps/pkgname/c/  : Reserved for the app\u0027s getCacheDir() tree; not stored.\n\nFor each package, the first entry in the tar stream is a file called\n\"_manifest\", nominally rooted at apps/pkgname.  This file contains some\nmetadata about the package whose data is stored in the archive.\n\nThe contents of shared storage can optionally be included in the tar\nstream. It is placed in the synthetic location:\n\nshared/...\n\nuid/gid are ignored; app uids are assigned at install time, and the\napp\u0027s data is handled from within its own execution environment, so\nwill automatically have the app\u0027s correct uid.\n\nForward-locked .apk files are never backed up.  System-partition\n.apk files are not backed up unless they have been overridden by a\npost-factory upgrade, in which case the current .apk *is* backed up --\ni.e. the .apk that matches the on-disk data.  The manifest preceding\neach application\u0027s portion of the tar stream provides version numbers\nand signature blocks for version checking, as well as an indication\nof whether the restore logic should expect to install the .apk before\nextracting the data.\n\nSystem packages can designate their own full backup agents.  This is\nto manage things like the settings provider which (a) cannot be shut\ndown on the fly in order to do a clean snapshot of their file trees,\nand (b) manage data that is not only irrelevant but actively hostile\nto non-identical devices -- CDMA telephony settings would seriously\nmess up a GSM device if emplaced there blind, for example.\n\nWhen a full backup or restore is initiated from adb, the system will\npresent a confirmation UI that the user must explicitly respond to\nwithin a short [~ 30 seconds] timeout.  This is to avoid the\npossibility of malicious desktop-side software secretly grabbing a copy\nof all the user\u0027s data for nefarious purposes.\n\n(*) The backup is not strictly a full mirror.  In particular, the\n    settings database is not cloned; it is handled the same way that\n    it is in cloud backup/restore.  This is because some settings\n    are actively destructive if cloned onto a different (or\n    especially a different-model) device: telephony settings and\n    AndroidID are good examples of this.\n\n(**) On the framework side it doesn\u0027t care that it\u0027s adb; it just\n    sends the tar stream to a file descriptor.  This can easily be\n    retargeted around whatever transport we might decide to use\n    in the future.\n\nKNOWN ISSUES:\n\n* the security UI is desperately ugly; no proper designs have yet\n  been done for it\n* restore is not yet implemented\n* shared storage backup is not yet implemented\n* symlinks aren\u0027t yet handled, though some infrastructure for\n  dealing with them has been put in place.\n\nChange-Id: Ia8347611e23b398af36ea22c36dff0a276b1ce91\n"
    },
    {
      "commit": "1d38d936a159a73ad06e481bd960d37c5ae1efed",
      "tree": "ea741faa897427ca4dbe745fbd28793abfb87801",
      "parents": [
        "641e093f28b0c1b4b3c5c399b9941479fd760eae"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 25 22:56:54 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 25 22:59:07 2011 -0700"
      },
      "message": "fix typo in Vector\u003c\u003e:: push_back and push_front\n\nparameter were inverted.\n\nChange-Id: I867b01de5f58354bb9668fa662dd2a7d78dd3b37\n"
    },
    {
      "commit": "589b64a64be16d04d35113bc7f2644e200cb4a3e",
      "tree": "3e288340aeb11469b98a85d6e65b1efce727aaab",
      "parents": [
        "9f0df630fda450571e097ab6b1f1b1e5fa71e981"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 25 15:28:17 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 25 15:28:17 2011 -0700"
      },
      "message": "Add some basic STL compatibility to Vector\u003c\u003e\n\nChange-Id: Iaf72623170ee415372c7989d7ba9ff627167449e\n"
    },
    {
      "commit": "461fa8b05dfb4fd334980365e27002a7520e866e",
      "tree": "19238dece6998ee2121503d18b4548163e9e2704",
      "parents": [
        "d3a6956a6d69d7399931c403cd31cb0236278fc6",
        "18490fb93e206fd899c3258096cc32f293373c92"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 12:51:08 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 12:51:08 2011 -0700"
      },
      "message": "resolved conflicts for merge of 18490fb9 to master\n\nChange-Id: I6c68e6fb0f9c1182a955689bbffc161a8f30bd37\n"
    },
    {
      "commit": "18490fb93e206fd899c3258096cc32f293373c92",
      "tree": "e45db3abacf59a0cba4604cde390c310e38e4153",
      "parents": [
        "0b9b8711a1a2107dc913cc751b7d981fce4f3082",
        "87b3c0dcc45223ff9d5ab2e39d7b9a6953e03f50"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 10:27:15 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 10:27:15 2011 -0700"
      },
      "message": "resolved conflicts for merge of 87b3c0dc to honeycomb-plus-aosp\n\nChange-Id: Ia1a0024aabf531438203eb9fea3a10dd15eabe53\n"
    },
    {
      "commit": "87b3c0dcc45223ff9d5ab2e39d7b9a6953e03f50",
      "tree": "8c64414e6f079c9511163657f200d2ee132309f4",
      "parents": [
        "4430670f48f75661293371dab8db55865f5f56e0",
        "08d9d9a46250c4fad66e9b637e8898a3524c4286"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Mon Apr 11 15:33:19 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Apr 11 15:33:19 2011 -0700"
      },
      "message": "am 08d9d9a4: Merge \"Runtime resource overlay, iteration 1.\"\n\n* commit \u002708d9d9a46250c4fad66e9b637e8898a3524c4286\u0027:\n  Runtime resource overlay, iteration 1.\n"
    },
    {
      "commit": "3fc982f41fda1f254bfbc35490d81cd82a0ed90a",
      "tree": "6f9ba92dc2c9001a156f298c37dcdef9c9552600",
      "parents": [
        "fb84ce0df6b2db84981e4efa4530397a85240d4a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 30 16:20:26 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 06 11:00:37 2011 -0700"
      },
      "message": "Add new resource configurations for screen width/height in \"dp\".\n\nYou can now specify resource configuration variants \"wNNNdp\"\nand \"hNNNdp\".  These are the minimum screen width/height in \"dp\"\nunits.  This allows you to do things like have your app adjust\nits layout based only on the about of horizontal space available.\n\nThis introduces a new configuration change flag for screen size.\nNote that this configuration change happens each time the orientation\nchanges.  Applications often say they handle the orientation change\nto avoid being restarted at a screen rotation, and this will now\ncause them to be restarted.  To address this, we assume the app can\nhandle this new config change if its target SDK version is \u003c ICS.\n\nChange-Id: I22f8afa136b4f274423978c570fa7c9855040496\n"
    },
    {
      "commit": "57f4b77c89bafedf9468f9a636561c0c193405c9",
      "tree": "9e73065411411858c9c6ae350c5ee8ffe14598c3",
      "parents": [
        "c6b22e2727bd3730edd5ad72831a9bb4670d00f3"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonyericsson.com",
        "time": "Thu Mar 17 14:13:41 2011 +0100"
      },
      "committer": {
        "name": "Kenneth Andersson",
        "email": "kenneth.andersson@sonyericsson.com",
        "time": "Fri Apr 01 14:12:10 2011 +0200"
      },
      "message": "Runtime resource overlay, iteration 1.\n\nRuntime resource overlay allows unmodified applications to appear\nas if they had been compiled with additional resources defined. See\nlibs/utils/README for more information.\n\nThis commit is the first iteration of runtime resource overlay. It\nprovides the actual overlay modifications and loading of trusted overlay\npackages (ie residing in /vendor) targeting framework-res.apk.\n\nThis commit loads exactly one overlay package. The overlay,\nif present, must target framework-res.apk and be located at\n/vendor/overlay/framework/framework-res.apk.\n\nChange-Id: If26ee7754813004a96c043dba37fbe99fa3919db\n"
    },
    {
      "commit": "6ed6f6d82d7b9f8d82f3ab3a9f718a0e59ffa476",
      "tree": "4376f402d02d4fea5371ccebb11d78e44171af2b",
      "parents": [
        "315f19be8ef26fee77db2455f8c2997680755f6d",
        "aa3855d5836d2a2d83baafdf6e40caf90d3dad1c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 20:16:42 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 17 20:16:42 2011 -0700"
      },
      "message": "Merge \"Refactor how timeouts are calculated.\""
    },
    {
      "commit": "aa3855d5836d2a2d83baafdf6e40caf90d3dad1c",
      "tree": "5f19b7bd1c42abf7e145637ed3459cf377fa94b9",
      "parents": [
        "843e29d3751017267b96565c543df0301c31a9f7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 17:29:09 2011 -0700"
      },
      "message": "Refactor how timeouts are calculated.\n\nAdded a timeout mechanism to EventHub and InputReader so that\nInputMappers can request timeouts to perform delayed processing of\ninput when needed.\n\nChange-Id: Iec2045baaf4e67690b15eef3c09a58d5cac76897\n"
    },
    {
      "commit": "48e122891afec8bfadaa9d7fdf731b8f711b5b91",
      "tree": "0c103210fc83805f971426337a4adbdfcb59aa1d",
      "parents": [
        "607a10c5c94e1f7a657a54c9ee8a9a9f31b50e25",
        "e22aa62362a3007ee59ac62d4b5969e216987995"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 17 00:13:49 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Mar 17 00:13:49 2011 -0700"
      },
      "message": "am e22aa623: am 25594e19: am f40e638e: fix [4093196] Device lock up - log spam with SharedBufferStack: waitForCondition(LockCondition) timed out\n\n* commit \u0027e22aa62362a3007ee59ac62d4b5969e216987995\u0027:\n  fix [4093196] Device lock up - log spam with SharedBufferStack: waitForCondition(LockCondition) timed out\n"
    },
    {
      "commit": "f40e638ec62cd9e1a1851809b7c8bf5e4187fad2",
      "tree": "fce830323935d7c7171c501278fb6c7ea9fdf9c8",
      "parents": [
        "7af7e00b9112f15d1683ae93975a6fcd9dd34da8"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Mar 16 23:18:07 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 17 00:04:42 2011 -0700"
      },
      "message": "fix [4093196] Device lock up - log spam with SharedBufferStack: waitForCondition(LockCondition) timed out\n\na memory corruption happned when the buffer pool was resized\n(like when playing a video or using camera) and there was\nno current active buffer. In this case, the faulty code\nwould index into an array at position -1 which corrupted\n24 bytes of data.\n\nalso improved region validation code (ifdef\u0027ed out by default)\n\nBug: 4093196\nChange-Id: I915c581d131148959d720e00e3892e9186ab733d\n"
    },
    {
      "commit": "a30f43624f76a7d49fcb48944c310cb4dbfc6522",
      "tree": "33802c8360cead9e9dd88ecfe8e8d8e167dc5b3d",
      "parents": [
        "d50349de17784f924f8cca6ef2fb2708b9fd2ecd",
        "72064c66e20b9cc86900a9d833c228c345a2b2a4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 16 17:31:30 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Mar 16 17:31:30 2011 -0700"
      },
      "message": "am 72064c66: am b0204d0a: am c2b91a61: Merge \"Modify the GL renderer\\\u0027s functor to pass the clip to WebView\" into honeycomb-mr1\n\n* commit \u002772064c66e20b9cc86900a9d833c228c345a2b2a4\u0027:\n  Modify the GL renderer\u0027s functor to pass the clip to WebView\n"
    },
    {
      "commit": "80911b851764b073310fd0bffdf4a7db0d8fdd0b",
      "tree": "854e09626693907162ed479408abd619e280ddc4",
      "parents": [
        "fc59176241f498ad4eeb4237800c2eb5edd9efcd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 16 15:30:12 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 16 15:31:33 2011 -0700"
      },
      "message": "Modify the GL renderer\u0027s functor to pass the clip to WebView\n\nChange-Id: If5efe399ca58f3000b2883e24e9f3736a2025184\n"
    },
    {
      "commit": "843e29d3751017267b96565c543df0301c31a9f7",
      "tree": "80277ab21b62650bb613dc6b7df062c4c7cc9963",
      "parents": [
        "437c2c1620d0a485a4f81fdb0aaf706d89b865e7",
        "2ed2462aa29c564f5231f317c27b3188da875e52"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 15 20:01:16 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 15 20:01:16 2011 -0700"
      },
      "message": "Merge \"Improve VelocityTracker numerical stability.\""
    },
    {
      "commit": "2ed2462aa29c564f5231f317c27b3188da875e52",
      "tree": "63209b0ae028c1353e79d79b5e4000e7c4402ecc",
      "parents": [
        "ace13b17866dc9136aeecf6dfaf7077f37434469"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 19:39:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 15 19:59:47 2011 -0700"
      },
      "message": "Improve VelocityTracker numerical stability.\n\nReplaced VelocityTracker with a faster and more accurate\nnative implementation.  This avoids the duplicate maintenance\noverhead of having two implementations.\n\nThe new algorithm requires that the sample duration be at least\n10ms in order to contribute to the velocity calculation.  This\nensures that the velocity is not severely overestimated when\nsamples arrive in bursts.\n\nThe new algorithm computes the exponentially weighted moving\naverage using weights based on the relative duration of successive\nsample periods.\n\nThe new algorithm is also more careful about how it handles\nindividual pointers going down or up and their effects on the\ncollected movement traces.  The intent is to preserve the last\nknown velocity of pointers as they go up while also ensuring\nthat other motion samples do not count twice in that case.\n\nBug: 4086785\nChange-Id: I2632321232c64d6b8faacdb929e33f60e64dcdd3\n"
    },
    {
      "commit": "e5eb43b5d9dfd02890dc7f729a4892b518c30570",
      "tree": "599c6804f1d32844c6241354f8f36e450151d2f7",
      "parents": [
        "7896f1bd551a466168144f58b6b5a9932cafa749",
        "7d7dcb5ea891ad4c3252ed832ebd06accc96153d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 15 13:51:17 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Mar 15 13:51:17 2011 -0700"
      },
      "message": "am 7d7dcb5e: am 4528a7db: Merge \"Bug 4016329 do full string comparisons\" into honeycomb-mr1\n\n* commit \u00277d7dcb5ea891ad4c3252ed832ebd06accc96153d\u0027:\n  Bug 4016329 do full string comparisons\n"
    },
    {
      "commit": "f8a1842e07d5c018b33762a72a1b1b5117947579",
      "tree": "38a13589cc1a40364e8a8b3bcc3ccd0c797ef47d",
      "parents": [
        "e21110f8b1e4aa884f7a4e2164ae90dab8d5f3fa"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 14 11:32:29 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 14 17:59:51 2011 -0700"
      },
      "message": "Bug 4016329 do full string comparisons\n\nUse full string comparisons instead of partial for\n  file extension and MIME type.\nDo case-insensitive comparison of MIME type and file extensions.\nFix error in comment for String8::getPathExtension.\nRemove dead code -- StringTokenizer is unused.\n\nChange-Id: I322be6235abbdaab5f7eafa48926dbb2cf46dc29\n"
    },
    {
      "commit": "ace13b17866dc9136aeecf6dfaf7077f37434469",
      "tree": "0ec5d01ef83b4d5148525f5befa28ca026b294c7",
      "parents": [
        "fd10d5cf56e5b1ba7692400e4fe4ae26b61f3285"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 17:39:48 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 14:12:03 2011 -0700"
      },
      "message": "Use touch pad gestures to manipulate the pointer.\n\n1. Single finger tap performs a click.\n2. Single finger movement moves the pointer (hovers).\n3. Button press plus movement performs click or drag.\n   While dragging, the pointer follows the finger that is moving\n   fastest.  This is important if there are additional fingers\n   down on the touch pad for the purpose of applying force\n   to an integrated button underneath.\n4. Two fingers near each other moving in the same direction\n   are coalesced as a swipe gesture under the pointer.\n5. Two or more fingers moving in arbitrary directions are\n   transformed into touches in the vicinity of the pointer.\n   This makes scale/zoom and rotate gestures possible.\n\nAdded a native VelocityTracker implementation to enable intelligent\nswitching of the active pointer during drags.\n\nChange-Id: I5ada57e7f2bdb9b0a791843eb354a8c706b365dc\n"
    },
    {
      "commit": "f7098ce95dde39a33ca280bd1ef9a13259e7b7e5",
      "tree": "d65b1a845662999e02de568916d65af1eacfd0a1",
      "parents": [
        "8b4a4207f6683ee3d9aaf9510a64c2f3589a5d69",
        "d00353fe3191571a6773ef2d11921cfcff260bc4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 07 22:45:52 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Mar 07 22:45:52 2011 -0800"
      },
      "message": "am d00353fe: am bc8a8e8c: Merge \"Add support for partial invalidates in WebView Bug #3461349\" into honeycomb-mr1\n\n* commit \u0027d00353fe3191571a6773ef2d11921cfcff260bc4\u0027:\n  Add support for partial invalidates in WebView Bug #3461349\n"
    },
    {
      "commit": "cabfcc1364eb7e4de0b15b3574fba45027b45cfc",
      "tree": "f38e237ba2009dcacb5082a99928aad379a7adc0",
      "parents": [
        "9b7146db6d9c0586b98b062fbcdb3fac6cc54d19"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 07 18:06:46 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 07 18:09:03 2011 -0800"
      },
      "message": "Add support for partial invalidates in WebView\nBug #3461349\n\nThis change also fixes two bugs that prevented partial invalidates\nfrom working with other views. Both bugs were in our EGL implementation:\nthey were preventing the caller from comparing the current context/surface\nwith another context/surface. This was causing HardwareRenderer to always\nredraw the entire screen.\n\nChange-Id: I33e096b304d4a0b7e6c8f92930f71d2ece9bebf5\n"
    },
    {
      "commit": "de6a47a3e9d1a8cb5722b9785f5ffb9046c23918",
      "tree": "65d534f3ed68fc9110ea4bb3910fcf865ffb984b",
      "parents": [
        "10993b2d1e3614073970aad119ffb2cc9bc8f73f",
        "df6410dce3dae0bdb7e13118b3878079a1dcce03"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 07 18:04:06 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Mar 07 18:04:06 2011 -0800"
      },
      "message": "am df6410dc: Merge \"Fix [3513017] in lockscreen but showing empty launcher (live wallpaper) only\" into gingerbread\n\n* commit \u0027df6410dce3dae0bdb7e13118b3878079a1dcce03\u0027:\n  Fix [3513017] in lockscreen but showing empty launcher (live wallpaper) only\n"
    },
    {
      "commit": "951d3fec41c8c77f5ce86a5394573e8180d93927",
      "tree": "49a8ec1a8241ba35781627b7562252e27efc2505",
      "parents": [
        "ff5a09904fb05f2776f1bbf1dd3915f38031190c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 09 18:38:55 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 07 16:56:16 2011 -0800"
      },
      "message": "Fix [3513017] in lockscreen but showing empty launcher (live wallpaper) only\n\n37c2a37 fix [3408713] Dialog window invisible sometimes\nd35c666 fix [3385504] Surface flinger hang when adding dim surface\n1723b04 fix [3389263] OMX.Nvidia.h264.decode fails to shutdown\n1b0114f fix a surface leak in SurfaceFlinger\n\nBug: 3513017\n\nChange-Id: Ia13ed8c9cdcb1f484e177cdcaff687e7c88a10c3\n"
    },
    {
      "commit": "1eb12937329d0fcdc29d9c5ab6c549c42d2dcd52",
      "tree": "edf9e157822b854b7ed480cff1867baa7188bfad",
      "parents": [
        "84af86c4ddac6e8a0e267d4e6309f7d51f4b03d2",
        "d313c665e618af3194f504064bcd284fe5368682"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Mar 03 12:21:15 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 03 12:21:15 2011 -0800"
      },
      "message": "Merge \"Add TextLayout Cache\""
    },
    {
      "commit": "05dc66ada6b61a6bdf806ffaa62617ac5394695d",
      "tree": "a7e395476241706de31498185a5c2ccb979bcb54",
      "parents": [
        "e43111fad31ad8e36a66df52a8c6002799996413"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 14:41:58 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 15:37:57 2011 -0800"
      },
      "message": "Fade out the mouse pointer after inactivity or other events.\n\nFades out the mouse pointer:\n- after 15 seconds of inactivity normally\n- after 3 seconds of inactivity in lights out mode\n- after a non-modifier key down\n- after a touch down\n\nExtended the native Looper to support enqueuing time delayed\nmessages.  This is used by the PointerController to control\npointer fade timing.\n\nChange-Id: I87792fea7dbe2d9376c78cf354fe3189a484d9da\n"
    },
    {
      "commit": "d313c665e618af3194f504064bcd284fe5368682",
      "tree": "afc941c310913e7ec79af8c50fb152b1281ba2ff",
      "parents": [
        "5fb008e3800032be18c6d5f1e7ace4d7c2661e26"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Feb 24 19:56:18 2011 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Mar 02 13:29:20 2011 -0800"
      },
      "message": "Add TextLayout Cache\n\n- use GenerationCache for caching\n- move GenerationCache.h from libs/hwui/utils to include/utils\n- add #define for cache activation / deactivation\n\nChange-Id: Ifaf519f0b5e33b087a453e4aa6430162d8438f20\n"
    },
    {
      "commit": "32a55cf66e12e5e56d2e05b73c6bef453477c2bb",
      "tree": "e5709c24f92bc304bfc32f75b8f23911092c5f40",
      "parents": [
        "d752c3b3e6c576ed1f18e86a7b18c33dc7c65791"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:11:44 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:20:52 2011 -0800"
      },
      "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": "5af3d0100524ac16fb7a7fba2a83a8d135009565",
      "tree": "d11d01f4f98d928b6ce886bc66bac6808ab055af",
      "parents": [
        "66d16910a84c9a67d854cf1d2d78cee94641be1f",
        "49862c3630632303c40ca37f1791ed4b092ce063"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 18:27:40 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 24 18:27:40 2011 -0800"
      },
      "message": "Merge \"Fix a wp\u003c\u003e bug where the owner ID would be wrong\""
    },
    {
      "commit": "49862c3630632303c40ca37f1791ed4b092ce063",
      "tree": "cb7d2a8d7d615664a206243557f82abb7c03f3c3",
      "parents": [
        "ec122eb46b6ce8f6e8bb3e08c34e575de666cd3e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 18:12:34 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 18:12:34 2011 -0800"
      },
      "message": "Fix a wp\u003c\u003e bug where the owner ID would be wrong\n\nthis was introduced recently. we make sure to use\nthe correct owner id (the sp) instead of the wp.\n\nChange-Id: I78fdc6ec0c2d3e687278b70442d74d1924b512a2\n"
    },
    {
      "commit": "ffbe826804e150013acbf3ab25bd405bbbd186fc",
      "tree": "51fae9c95265246e6de2100556cb7d68746f9614",
      "parents": [
        "a28f6f11f22963e3679537e83f243edeaa5ee17c",
        "ec122eb46b6ce8f6e8bb3e08c34e575de666cd3e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 16:23:51 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 24 16:23:51 2011 -0800"
      },
      "message": "Merge \"Fix some issues with RefBase debugging.\""
    },
    {
      "commit": "6152bbc65016e526f25d24a66b92d6aa822f6ee0",
      "tree": "c889b96609acef1ddde26a338e1b4a0e5a802074",
      "parents": [
        "7b76c8d3fc25aedea6edfed9638b008faa2f6ae8",
        "c2b3cda097d2f8ac9211360aa82995d693e0764c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 24 10:01:31 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 24 10:01:31 2011 -0800"
      },
      "message": "Merge \"Bug 3362814 Fix SMP race in access to mRequestExit\""
    },
    {
      "commit": "ec122eb46b6ce8f6e8bb3e08c34e575de666cd3e",
      "tree": "c5d6d30e2802f8e9671731cc16095c6040358f09",
      "parents": [
        "47b8adec3904535c8d8ce2b6e42ecd736f2d90ce"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 20:23:43 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 23 22:21:41 2011 -0800"
      },
      "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": "c2b3cda097d2f8ac9211360aa82995d693e0764c",
      "tree": "8a6baf03da30391ff32d3a269df42dda278f701b",
      "parents": [
        "282ff9ae3f798dec325ce6b868f053649b596a8c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 01 11:32:29 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 23 17:49:59 2011 -0800"
      },
      "message": "Bug 3362814 Fix SMP race in access to mRequestExit\n\nAlso fix an unlikely SMP race in access to mHoldSelf on entry to _threadLoop.\n\nChange-Id: I6cbc0b94739c7dd5e77e8a5ba0da22cdc0b1a4db\n"
    },
    {
      "commit": "a688b574d294faae5f56224908b40856c5045aac",
      "tree": "2af92697194f007d9e0beb044c005a863ac40a85",
      "parents": [
        "5fb008e3800032be18c6d5f1e7ace4d7c2661e26"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 15:23:08 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 22 18:08:58 2011 -0800"
      },
      "message": "Remove RefBase.h dependency on TextOutput.h\n\nChange-Id: I72cd6b98ef82b4868fe1c8ec87862cf43fb4ee73\n"
    },
    {
      "commit": "c6c3e77d4d5cd8de3b1a56bdffdfd42774849512",
      "tree": "3703fb371090adee31f311d8ac5f95f60a31418a",
      "parents": [
        "592989b3b7c088114de6ee59d609449de749fd78",
        "b66b7a2c183a1423ea629d4f73ed95f9b87d54b7"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 10 15:08:33 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Feb 10 15:08:33 2011 -0800"
      },
      "message": "am b66b7a2c: Merge \"fix [3408713] Dialog window invisible sometimes\" into honeycomb\n\n* commit \u0027b66b7a2c183a1423ea629d4f73ed95f9b87d54b7\u0027:\n  fix [3408713] Dialog window invisible sometimes\n"
    },
    {
      "commit": "37c2a3750138a5f9cb34d4f644642da677d435c6",
      "tree": "6cb616594c9d6eea4174c1e4c88f97145903c978",
      "parents": [
        "cc24170dc653ea5fc9fe7b9b8c596700c4d6dc99"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 09 18:38:55 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 09 18:38:55 2011 -0800"
      },
      "message": "fix [3408713] Dialog window invisible sometimes\n\nweak pointer comparison operators were implemented wrong,\nthey were using the internal \"unsafe\" pointer. We could end up\nwith two \"equal\" weak pointer pointing to different objects.\n\nthis caused KeyedVector keyed by weak pointer to work incorrectly, in\nturn causing a window that just got added to a list to be immediately\nremoved.\n\nChange-Id: Ib191010c39aafa9229109e4211f6c3b2b2f9696d\n"
    },
    {
      "commit": "056340ac95f233090990d77266d89aad3b60f913",
      "tree": "6de7d20303f7778706e1d1dd4c0beaece8fd0d7e",
      "parents": [
        "25503f1c9f0b5f718052b71dc5b21d1c8576d015",
        "235ec8ad24293fbfbd282d5379ea8e225ef083bc"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Jan 31 11:32:33 2011 -0800"
      },
      "committer": {
        "name": "Android Code Review",
        "email": "code-review@android.com",
        "time": "Mon Jan 31 11:32:33 2011 -0800"
      },
      "message": "Merge \"stubs\""
    },
    {
      "commit": "371de9695508073fbbde8181eb230e99cb045206",
      "tree": "8b725299fe6b9638dad8cc3dc538a23ae86377ac",
      "parents": [
        "bda99568d84530c6442af0602e9c12e6cb897780",
        "a1f5e82f37c77af7b1d630b5bca715d1742f1234"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@android.com",
        "time": "Sat Jan 29 23:07:48 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Jan 29 23:07:48 2011 -0800"
      },
      "message": "am a1f5e82f: am a30063d8: am 25eb0464: Merge \"Normalize output from aapt d\"\n\n* commit \u0027a1f5e82f37c77af7b1d630b5bca715d1742f1234\u0027:\n  Normalize output from aapt d\n"
    },
    {
      "commit": "235ec8ad24293fbfbd282d5379ea8e225ef083bc",
      "tree": "d413852bfb18f7d175e0aee04591c826b65b1cb9",
      "parents": [
        "9720323a5138acafbe30da38d61eeac469b675a4"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Sat Jan 29 06:19:37 2011 -0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Sat Jan 29 06:19:37 2011 -0800"
      },
      "message": "stubs\n\nChange-Id: I829039f3817a172e66eeb9df397e896a488a259d\n"
    },
    {
      "commit": "daf98e941e140e8739458126640183b9f296a2ab",
      "tree": "e338ad021139d706004b70a38fbbe539ccfbbacf",
      "parents": [
        "57ffc00239edcfe733832771e1429fca20182207"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Jan 10 14:10:36 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Jan 24 08:43:20 2011 -0800"
      },
      "message": "Use optimized display lists for all hwaccelerated rendering\n\nPreviously, display lists were used only if hardware acceleration\nwas enabled for an application (hardwareAccelerated\u003dtrue) *and* if\nsetDrawingCacheEnabled(true) was called. This change makes the framework\nuse display lists for all views in an application if hardware acceleration\nis enabled.\n\nIn addition, display list renderering has been optimized so that\nany view\u0027s recreation of its own display list (which is necessary whenever\nthe visuals of that view change) will not cause any other display list\nin its parent hierarchy to change. Instead, when there are any visual\nchanges in the hierarchy, only those views which need to have new\ndisplay list content will recreate their display lists.\n\nThis optimization works by caching display list references in each\nparent display list (so the container of some child will refer to its\nchild\u0027s display list by a reference to the child\u0027s display list). Then when\na view needs to recreate its display list, it will do so inside the same\ndisplay list object. This will cause the content to get refreshed, but not\nthe reference to that content. Then when the view hierarchy is redrawn,\nit will automatically pick up the new content from the old reference.\n\nThis optimization will not necessarily improve performance when applications\nneed to update the entire view hierarchy or redraw the entire screen, but it does\nshow significant improvements when redrawing only a portion of the screen,\nespecially when the regions that are not refreshed are complex and time-\nconsuming to redraw.\n\nChange-Id: I68d21cac6a224a05703070ec85253220cb001eb4\n"
    },
    {
      "commit": "9872bf4a2d4ae1e7ded170c8e74d400fe6be9bfb",
      "tree": "4040c675a82cdab2888c72e56188d8cd91ae547b",
      "parents": [
        "69ebb984f230a523dc316bdb2c9e9c28111364fd"
      ],
      "author": {
        "name": "Shachar Shemesh",
        "email": "lingnu@gmail.com",
        "time": "Mon Dec 20 17:38:33 2010 +0200"
      },
      "committer": {
        "name": "Shachar Shemesh",
        "email": "lingnu@gmail.com",
        "time": "Tue Jan 04 20:52:08 2011 +0200"
      },
      "message": "Normalize output from aapt d\n\nMake the output from aapt dump --values resources and aapt dump xmltree normalized, so that it is unambigously displayed\nregardless of the content of the strings.\n\nChange-Id: Ia3bff36c4ee1e9a44f474534e154830948beabdf\n"
    },
    {
      "commit": "83c09685f2e62bc3cf7e71bc61d903f4b9ccaeb4",
      "tree": "c8bc2824e0d2e2b353b3d16ecf5836ab8fd9e67c",
      "parents": [
        "dd830c21149c336139b28560c0e6fba9f3d0e0fc"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 23 17:50:18 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Dec 29 13:19:53 2010 -0800"
      },
      "message": "Add initial support for cursor-based pointing devices.\n\nSome parts stubbed out but you can plug in a mouse and move\na green cursor around to interact with the UI.\n\nChange-Id: I80d597a7f11d3bd92041890f74b3c77326975e6e\n"
    },
    {
      "commit": "f7d63cf2cbab403b14778ec45839107078e20824",
      "tree": "b476d75af36e5a6fbbd0e1a7161a4fe3598114b0",
      "parents": [
        "957d85ec046651a8b0549b62021079ddcc0b8f53"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Dec 10 15:37:48 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Dec 10 15:37:48 2010 -0800"
      },
      "message": "dump callstack on Surface use error\n\nChange-Id: I38e260dd47349b9af3a999dda683a083a94be16d\n"
    },
    {
      "commit": "ddb76c4644756b31be948d70aaa8ee541dd94999",
      "tree": "782d260d2da982941148be7c1a0a0780749cdfdc",
      "parents": [
        "8028a951c3aa74990907efb9376d1093d84084af"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 24 12:56:06 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Dec 08 11:21:30 2010 -0800"
      },
      "message": "Change assets to use 64-bit API\n\nThe asset system and supporting libraries were using off_t instead of\noff64_t to access files larger than 2GB (32-bit signed). This change\nreplaces all off_t with off64_t and lseek64.\n\nThere is a new utils/Compat.h added for Mac OS compatibility.\n\nAlso fixed some size-related compiler warnings.\n\nBug: 3205336\nChange-Id: I9097b3cb7a602e811fe52f245939d8975da55e9e\n"
    },
    {
      "commit": "9065504a63d6bf37bf621191fda1d1fe4da76ee3",
      "tree": "500948db3ef54c52fc65f52f4ab4a220e4504009",
      "parents": [
        "d6a46103bfbed17451abf0fb608d7b778597846c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 13:50:46 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 16:01:32 2010 -0800"
      },
      "message": "Improve support for external keyboards.\n\nUse Vendor ID, Product ID and optionally the Version to\nlocate keymaps and configuration files for external devices.\n\nMoved virtual key definition parsing to native code so that\nEventHub can identify touch screens with virtual keys and load\nthe appropriate key layout file.\n\nCleaned up a lot of old code in EventHub.\n\nFixed a regression in ViewRoot\u0027s fallback event handling.\n\nFixed a minor bug in FileMap that caused it to try to munmap\nor close invalid handled when released if the attempt to map\nthe file failed.\n\nAdded a couple of new String8 conveniences for formatting strings.\n\nModified Tokenizer to fall back to open+read when mmap fails since\nwe can\u0027t mmap sysfs files as needed to open the virtual key\ndefinition files in /sys/board_properties/.\n\nChange-Id: I6ca5e5f9547619fd082ddac47e87ce185da69ee6\n"
    },
    {
      "commit": "47e6b1b5eef8ee99872f278f66bc498c4fcca0d8",
      "tree": "ef5a7c87b8dca433ea9707c1289ae7c8d2ba3787",
      "parents": [
        "735206f121cb2a11b3397870e6565178627e0aa3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 29 17:37:49 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 30 17:15:49 2010 -0800"
      },
      "message": "Support non-orientation aware keyboards and other devices.\n\nFixed a bug with dpad keys on external keyboards being rotated\naccording to the display orientation by adding a new input device\nconfiguration property called \"keyboard.orientationAware\".\n\nAdded a mechanism for overriding the key layout and key character\nmap in the input device configuration file using the new\n\"keyboard.layout\" and \"keyboard.characterMap\" properties.\n\nAlso added \"trackball.orientationAware\", \"touch.orientationAware\" and\n\"touch.deviceType\" configuration properties.\n\nRewrote the configuration property reading code in native code\nso that it can be used by EventHub and other components.\n\nAdded basic support for installable idc, kl, and kcm files\nin /data/system/devices.  However, there is no provision for\ncopying files there yet.\n\nDisabled long-press character pickers on full keyboards so that\nkey repeating works as expected.\n\nChange-Id: I1bd9f0c3d344421db444e7d271eb09bc8bab4791\n"
    },
    {
      "commit": "a6210d061bb79e5c10ed88c99111df51e52e4472",
      "tree": "c789bd306c908846fcfa1e8b6b74435daddc9974",
      "parents": [
        "7ffd0871e6b8d7ab9443bef6e8b2a31674d1f623"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 19 13:13:07 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 19 13:52:19 2010 -0800"
      },
      "message": "Fix SDK build on Windows due to use of mmap.\n\nChange-Id: Id4bd9a6f932285c93c5853e540efc20b99876564\n"
    },
    {
      "commit": "6b53e8daa69cba1a2a5a7c95a01e37ce9c53226c",
      "tree": "db912c6cdf230ef7f2cf406c545b3bbae3f09ea2",
      "parents": [
        "a914f340ae5b267dc3ab36c1156c795b8fa18f5d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Nov 10 16:03:06 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Nov 18 09:49:03 2010 -0800"
      },
      "message": "Added support for full PC-style keyboards.\n\nBREAKING CHANGE: Redesigned the key character map format to\naccomodate full keyboards with more comprehensive suite of modifiers.\nOld key character maps will not work anymore and must be updated.\nThe new format is plain text only and it not compiled to a binary\nfile (so the \"kcm\" tool will be removed in a subsequent check-in).\n\nAdded FULL keyboard type to support full PC-style keyboards.\n\nAdded SPECIAL_FUNCTION keyboard type to support special function\nkeypads that do not have any printable keys suitable for typing\nand only have keys like HOME and POWER\n\nAdded a special VIRTUAL_KEYBOARD device id convention that maps\nto a virtual keyboard with a fixed known layout.  This is designed\nto work around issues injecting input events on devices whose\nbuilt-in keyboard does not have a useful key character map (ie.\nwhen the built-in keyboard is a special function keyboard only.)\n\nModified several places where events were being synthesized\nto use the virtual keyboard.\n\nRemoved support for the \"qwerty\" default layout.\nThe new default layout is \"Generic\".  For the most part \"qwerty\"\nwas being used as a backstop in case the built-in keyboard did\nnot have a key character map (probably because it was a special\nfunction keypad) and the framework needed to be able to inject\nkey events anyways.  The latter issue is resolved by using the\nspecial VIRTUAL_KEYBOARD device instead of BUILT_IN_KEYBOARD.\n\nAdded the concept of a key modifier behavior so that\nMetaKeyKeyListener can distinguish between keyboards that use\nchorded vs. toggled modifiers.\n\nWrote more robust key layout and key character map parsers\nto enable support for new keyboard features and user installable\nkey maps.\n\nFixed a bug in InputReader generating key ups when keys\nare released out of sequence.\n\nUpdated tons of documentation.\n\nCurrently QwertyKeyListener is being used for full keyboards\nwith autotext and capitalization disabled.  This mostly works\nbut causes some problems with character pickers, etc.\nThese issues will be resolved in subsequent changes.\n\nChange-Id: Ica48f6097a551141c215bc0d2c6f7b3fb634d354\n"
    },
    {
      "commit": "300ba6846949f5b21c6d93d7698dbc39716cf832",
      "tree": "f00aed47d06332a09aa6909a6605b0743661c981",
      "parents": [
        "d781089731127bd9199d47f53b170895868b8750"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Nov 09 14:37:23 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Nov 12 15:53:40 2010 -0800"
      },
      "message": "Split UTF functions from String8/16\n\nSplit out all the UTF-8/16/32 handling code from String8/16 to its own\nfile to allow better reuse of code.\n\nChange-Id: If9ce63920edc75472c38da4adce0d13cda9ad2f7\n"
    },
    {
      "commit": "55fc850cf992cdcb0993cb109d2f716613c0dbdd",
      "tree": "2277f806e14fb8a6b422dde687ac9779176ae83b",
      "parents": [
        "490d7c5deda8d602f916942d7002757082274b9b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 28 14:47:01 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 29 12:47:07 2010 -0700"
      },
      "message": "Add path to get different DPI drawables\n\nAllow a caller to request a different density than their current display\nallows. This can mean a device displaying mdpi can get a resource that\u0027s\nin hdpi and have it pretend to be in mdpi resolution. If a drawable\nthat\u0027s returned is not in the requested density, it will set it at the\nappropriate density to be scaled up later on.\n\nThe API for this is hidden currently.\n\nBug: 3134688\nChange-Id: I6c3908cbdef4907b8d3f1576df9e3b0e7af1755a\n"
    },
    {
      "commit": "cf8918874dc446f34bbc2a93a6b20235c30a7645",
      "tree": "6267c828bc01149954e37b827a75ae2c8f0f99e6",
      "parents": [
        "6913c6176b6d239f833ea21120b93547aa5f93f7"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Wed Oct 20 17:06:28 2010 -0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Wed Oct 20 17:06:28 2010 -0700"
      },
      "message": "Revert \"Add length-equality test in String operator\u003d\u003d checks.\"\n\nThis reverts commit e28210d401ae4ed1258b84c9b17a172a757190e8.\n"
    },
    {
      "commit": "e28210d401ae4ed1258b84c9b17a172a757190e8",
      "tree": "33fbac2552b71234b6872bd067e256555d4acae7",
      "parents": [
        "4f5f7c968339a83b6af98ac8893a1ac33c7aa7bc"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Wed Oct 20 13:24:58 2010 -0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Wed Oct 20 15:03:49 2010 -0700"
      },
      "message": "Add length-equality test in String operator\u003d\u003d checks.\n\nChange-Id: I6ebc6ef85aac4539269f137c1f29f95b9828d4f9\n"
    },
    {
      "commit": "3ee1e7b5ab852a246b45ed903a72409a19645a1b",
      "tree": "be04fd9c88a81ee73bfd1da2188957e29e68ebe4",
      "parents": [
        "e1baa9c79ffd9240a20bab88c865afae5ce53e59",
        "dc3ad87c04348c925aa86863ed6d25f18a8c6c36"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Oct 16 09:12:43 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Oct 16 09:12:43 2010 -0700"
      },
      "message": "am dc3ad87c: am 78a76fea: Merge \"Revert to using epoll_wait().\" into gingerbread\n\nMerge commit \u0027dc3ad87c04348c925aa86863ed6d25f18a8c6c36\u0027\n\n* commit \u0027dc3ad87c04348c925aa86863ed6d25f18a8c6c36\u0027:\n  Revert to using epoll_wait().\n"
    },
    {
      "commit": "497a92cc5ba2176b8a8484b0a7da040eac0e887b",
      "tree": "2d9bd7a2ef24754fa83a36f440ee45fd8a32b9fb",
      "parents": [
        "cd9afc3722a1edebf0e6f7172627930052c81ce4"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 12 17:55:08 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 16:00:07 2010 -0700"
      },
      "message": "Add keycodes and meta-key modifiers to support external keyboards.\n\nAdded new key maps for external keyboards.  These maps are intended to\nbe shared across devices by inheriting the \"keyboards.mk\" product\nmakefile as part of the device\u0027s product definition.\n\nOne of the trickier changes here was to unwind some code in\nMetaKeyKeyListener that assumed that only the low 8 bits of the meta key\nstate were actually used.  The new code abandons bitshifts in favor\nof simple conditionals that are probably easier to read anyways.\nThe special meta key state constants used by MetaKeyKeyListener\nare now (@hide) defined in KeyEvent now so as to make it clearer that they\nshare the same code space even if those codes are not valid for KeyEvents.\n\nThe EventHub now takes care of detecting the appropriate key layout\nmap and key character map when the device is added and sets system\nproperties accordingly.  This avoids having duplicate code in\nKeyCharacterMap to probe for the appropriate key character map\nalthough the current probing mechanism has been preserved for legacy\nreasons just in case.\n\nAdded support for tracking caps lock, num lock and scroll lock and\nturning their corresponding LEDs on and off as needed.\n\nThe key character map format will need to be updated to correctly support\nPC style external keyboard semantics related to modifier keys.\nThat will come in a later change so caps lock doesn\u0027t actually do\nanything right now except turn the shiny LEDs on and off...\n\nAdded a list of symbolic key names to KeyEvent and improved the toString()\noutput for debug diagnosis.  Having this list in a central place in the\nframework also allows us to remove it from Monkey so there is one less\nthing to maintain when we add new keycodes.\n\nBug: 2912307\nChange-Id: If8c25e8d50a7c29bbf5d663c94284f5f86de5da4\n"
    },
    {
      "commit": "fcab0f5502410b975afe045354bbae31ccba68a5",
      "tree": "184b37e57a998580c15fdaa98d7d8bf0c9155a90",
      "parents": [
        "10aca41e51934822dc492cb69b69cef37f42ad42",
        "8fda1636e3e35f060b9046294efd3c062a1fdb84"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 15 14:00:58 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 15 14:00:58 2010 -0700"
      },
      "message": "am 8fda1636: am bdf8034c: Merge \"OBB: use PBKDF2 for key generation.\" into gingerbread\n\nMerge commit \u00278fda1636e3e35f060b9046294efd3c062a1fdb84\u0027\n\n* commit \u00278fda1636e3e35f060b9046294efd3c062a1fdb84\u0027:\n  OBB: use PBKDF2 for key generation.\n"
    },
    {
      "commit": "78a76fea28b8101c1860a2f1115329e3e63abda3",
      "tree": "c4e75c2b58ff80abd29db1527e45d8d034d13d8c",
      "parents": [
        "3fbfee2febf13bcc46c389ebecbf91465ef211b7",
        "a97e50f20d39d2abf0fab77090dd82bdef4bce7a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 14 22:18:43 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 14 22:18:43 2010 -0700"
      },
      "message": "Merge \"Revert to using epoll_wait().\" into gingerbread"
    },
    {
      "commit": "3b1abba6bbc895d63da3e82e9b158c01bd12eddd",
      "tree": "1296e8c25a2927c94783eda83100c061fc9fe379",
      "parents": [
        "dfc07279fc6205c38f5f39cb5ba4f0aef6b593a4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Oct 13 15:00:07 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Oct 13 18:25:33 2010 -0700"
      },
      "message": "OBB: use PBKDF2 for key generation.\n\nSwitch to using PBKDF2 for the key generation for OBBs. Any previously\ngenerated OBBs will stop being read correctly. A small pbkdf2gen program\nis available to allow generation of appropriate keys with the salts.\n\nBug: 3059950\nChange-Id: If4305c989fd692fd1150eb270dbf751e09c37295\n"
    },
    {
      "commit": "d5da367024c36b317b101fc066a7a4cf992c7d58",
      "tree": "87cf98a6514557be5427c462349a0ee9deb9a9dd",
      "parents": [
        "bcf74accafcdac6c7a940ce28982fc0ef08e111b",
        "22cb4ef8ce9c4d5536ac5cee5c40b82bfa56ccc5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Oct 10 12:52:40 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Oct 10 12:52:40 2010 -0700"
      },
      "message": "am 22cb4ef8: am d577cfd7: Merge \"Switch Looper back to using poll() instead of epoll().\" into gingerbread\n\nMerge commit \u002722cb4ef8ce9c4d5536ac5cee5c40b82bfa56ccc5\u0027\n\n* commit \u002722cb4ef8ce9c4d5536ac5cee5c40b82bfa56ccc5\u0027:\n  Switch Looper back to using poll() instead of epoll().\n"
    },
    {
      "commit": "a97e50f20d39d2abf0fab77090dd82bdef4bce7a",
      "tree": "27e8025752321b42eccd5611a827bf075395b14f",
      "parents": [
        "d577cfd73a223279f9a5af698f55edd38a3fe4db"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 07 16:17:57 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 07 16:17:57 2010 -0700"
      },
      "message": "Revert to using epoll_wait().\n\nThis change depends on the kernel having been patched to use hrtimers\ninstead of jiffies for scheduling epoll timeouts.\n\nChange-Id: I216bc1c4f565e67ebcb3d2ba4280cb615932bb9e\n"
    },
    {
      "commit": "415d8c38199e258dfce92cdb0c69e056b3b51ef8",
      "tree": "5bf6d167a19b272f2a153df6010a7dd6f58a274f",
      "parents": [
        "930d6c3cd5ad387489eb1d35a38beeafe54166b6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Oct 05 15:35:37 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 07 13:26:39 2010 -0700"
      },
      "message": "Switch Looper back to using poll() instead of epoll().\n\nAdded a couple of micro-optimizations to avoid calling wake() unnecessarily\nand reduce JNI overhead slightly.\n\nFixed a minor issue where we were not clearing the \"next\" field of Messages\nreturned by the MessageQueue so the Message would hold on to its successor\nand potentially prevent the GC from collecting it if the message were leaked\nsomehow.\n\nChange-Id: I488d29417ce0cdd7d0e447cda76ec978ef7f811c\n"
    },
    {
      "commit": "4f65ea60555ef01e6ca0cd64acc0ef698640c853",
      "tree": "b3078773f7d362251cab92b32ac8c12f25adb690",
      "parents": [
        "0f935ebfffee769c3c707813bf9db7d50996d785",
        "bfa33b9484e2c0a019ab81f30261b9696df23a9b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 05 17:02:42 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 05 17:02:42 2010 -0700"
      },
      "message": "am bfa33b94: am f84a5918: Merge \"Use pread() in ZipFileRO for Linux\" into gingerbread\n\nMerge commit \u0027bfa33b9484e2c0a019ab81f30261b9696df23a9b\u0027\n\n* commit \u0027bfa33b9484e2c0a019ab81f30261b9696df23a9b\u0027:\n  Use pread() in ZipFileRO for Linux\n"
    },
    {
      "commit": "259ec46e8e80a9f1d0b5c7a3865a498110a7f11b",
      "tree": "c2987b5a006425d41438227011f5b9b5a6febb15",
      "parents": [
        "106950f20bd352ed72ddf4490b2e19d305e36a74"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 14:20:14 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 15:17:19 2010 -0700"
      },
      "message": "Use pread() in ZipFileRO for Linux\n\nAssetManager instances are created by zygote and passed to all its\nchildren so that they don\u0027t have to individually open\nframeworks-res.apk. This creates a problem for determining the current\nfile offset when using lseek() on those files, because you can\u0027t\nguarantee the cross-process locking of a mutex. Luckily, Linux\nimplements pread() to get around this suckiness.\n\nThe problem is that only Linux implements this, so we have to keep the\nold locking for use on host builds with aapt and friends. aapt doesn\u0027t\nhave this same problem of sharing file descriptors across forked\nprocesses, so we can keep the local AutoMutex to protect accesses of\nthose files.\n\nChange-Id: Ibe9f11499a53fe345f50fbaea438815ec0fd363e\n"
    },
    {
      "commit": "6d95c0d941fa0d9ea50b74e60baf82956a4d4452",
      "tree": "89b9d1f34e4ccbba4ef98dfea8f3f8911dcc8b3d",
      "parents": [
        "51d2adab83837425dae8062b7ff2a5bd1e732dd9",
        "ac7540733cafcca5bdb1842e1ebcb396ba064583"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 07:54:06 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 04 07:54:06 2010 -0700"
      },
      "message": "am ac754073: am b58b2714: Merge \"ZipFileRO: moar logging and wrap close\" into gingerbread\n\nMerge commit \u0027ac7540733cafcca5bdb1842e1ebcb396ba064583\u0027\n\n* commit \u0027ac7540733cafcca5bdb1842e1ebcb396ba064583\u0027:\n  ZipFileRO: moar logging and wrap close\n"
    },
    {
      "commit": "6cb241f9024c6923715cf4e9eeaf803a7d258750",
      "tree": "455507c53e8e0d20dee11d1888cebd67ff947523",
      "parents": [
        "306137d97f40a4f807c54a75210343c9262360d1"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 01 18:28:28 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 01 18:30:59 2010 -0700"
      },
      "message": "ZipFileRO: moar logging and wrap close\n\nThere is apparently still a race upon reading the entry Local File\nHeader that can\u0027t be tracked down, so move the LFH check inside the\nmutex-protected block so we can call lseek again to see where we are\nwhen we log an error.\n\nAlso, close() can fail so use TEMP_FAILURE_RETRY on it so we don\u0027t\nunwittingly leak file descriptors when Mean Mr. EINTR comes a-knocking.\n\nChange-Id: I753abad0bd882fe28f7281c406fa76f64393ef4c\n"
    },
    {
      "commit": "464fb74e28b6d76d5e741abcdbb714eea2d9b4d1",
      "tree": "806828fef18870b8c0a5cde7a6e679dce8b5a122",
      "parents": [
        "6d3ed72bf2fb9d958245c9d34443291a26128c59",
        "9785bf0f2b6b8758aed7ded3b996a2ef0be89919"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 27 14:40:38 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 27 14:40:38 2010 -0700"
      },
      "message": "am 9785bf0f: am 14a288da: Merge \"Add suuport for splitting touch events across windows.\" into gingerbread\n\nMerge commit \u00279785bf0f2b6b8758aed7ded3b996a2ef0be89919\u0027\n\n* commit \u00279785bf0f2b6b8758aed7ded3b996a2ef0be89919\u0027:\n  Add suuport for splitting touch events across windows.\n"
    }
  ],
  "next": "14a288da6a372230d9af41da12241fe500eec837"
}
