)]}'
{
  "log": [
    {
      "commit": "2e102a05ca24c15921795d3bc320ade8353319bb",
      "tree": "2741969af9c9126585d6634dfe92c07b444c7e55",
      "parents": [
        "48395385039a0c845bba8913c8d0c76981425aa4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jan 18 15:51:30 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jan 18 15:51:30 2011 -0800"
      },
      "message": "fix [3361121] hang in glClear() - device unresponsive, OTA fails\n\nGenerally we never want to lock a buffer for write access if it is at\nthe \"head\" on the surfaceflinger side. The only exception (1) is when\nthe buffer is not currently in use AND there is at least one queued\nbuffer -- in which case, SurfaceFlinger will never use said buffer\nanymore, because on the next composition around, it will be able to\nretire the first queued buffer.\n\nThe logic above relies on SurfaceFlinger always retiring\nand locking a buffer before composition -- unfortunately this\ndidn\u0027t happen during a screenshot.\n\nThis could leave us in a situation where a buffer is locked by the\napplication for write, and used by SurfaceFlinger for texturing,\ncausing a hang.\n\nHere, we fix this issue by never assuming the exception (1), it was\nintended as an optimization allowing ANativeWindow::lockBuffer() to\nreturn sooner and was justified when most of SF composition was\ndone in software. The actual buffer locking is now ensured by\ngralloc. We could have handled screenshots in a similar way to\na regular composition, but it could have caused glitches on screen,\nessentially, taking a screenshot could cause to skip a frame.\n\nChange-Id: I1f226b1ebdf6918439b687c2723955d55b842c55\n"
    },
    {
      "commit": "a7393dd66f0127c8acdd5f8928b0c2d0de602275",
      "tree": "874fa7e64d5c1bc8755ddf88b8aafe1d2171ed69",
      "parents": [
        "e7df0ddee486f4705b17b4d8ed57ddbeb8b71943",
        "afc724b907336c043a38487fb5620074c9777d45"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jan 14 19:27:32 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 14 19:27:32 2011 -0800"
      },
      "message": "Merge \"Fix error reporting in Surface::cancelBuffer()\" into honeycomb"
    },
    {
      "commit": "afc724b907336c043a38487fb5620074c9777d45",
      "tree": "874193599e69223abda180d5cf8f02376307599a",
      "parents": [
        "853548287ffe4eb85d1bd10669270292336d137a"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jan 14 11:04:34 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jan 14 11:04:34 2011 -0800"
      },
      "message": "Fix error reporting in Surface::cancelBuffer()\n\nwhen we validate the surface there, most errors are in fact allowed\nbecause it is legal to cancel a buffer after a surface has been\ndestroyed (for instance). in that case make sure to not log\nerror messages as they are very confusing.\n\nChange-Id: Iecdfbaf6d9ee5da54d56cd7ea7a0d430c30934b0\n"
    },
    {
      "commit": "f7acf162f8d682c6ebc9af41ca76795b79509193",
      "tree": "b2f5246744f5a8c15f841f6a45da4a53679eff67",
      "parents": [
        "e8d0e8a77690eca02f15b0d5e628be7cad5d0133"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Wed Jan 12 18:30:40 2011 -0800"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Jan 13 12:19:04 2011 -0800"
      },
      "message": "Fix remote GraphicBuffer allocation in SurfaceFlinger.\n\nThis change fixes a horrible hack that I did to allow application\nprocesses to create GraphicBuffer objects by making a binder call to\nSurfaceFlinger.  This change introduces a new binder interface\nspecifically for doing this, and does it in such a way that\nSurfaceFlinger will maintain a reference to the buffers until the app is\ndone with them.\n\nChange-Id: Icb240397c6c206d7f69124c1497a829f051cb49b\n"
    },
    {
      "commit": "0a53d5c81b5553d6063b8133492275ce88186978",
      "tree": "dc6573bc4f7011bc5e7be5e6a976f684e52ac061",
      "parents": [
        "42edf0f8cf8ca85dd5010558ff399e2c9a4c779c"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Dec 20 11:21:07 2010 -0800"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Jan 06 13:12:35 2011 -0800"
      },
      "message": "Add the ISurfaceComposer::createGraphicBuffer IPC.\n\nThis change adds a new binder method to the ISurfaceComposer interface.\nThis IPC is intended to allow SurfaceFlinger clients to allocate gralloc\nbuffers using SurfaceFlinger as a proxy to gralloc.\n\nChange-Id: Ide9fc283aec5da6268ba62cfed0c3319a50b640d\n"
    },
    {
      "commit": "52e6ada69e0cdc4366f97cef12d8ce93c52c3b24",
      "tree": "886362a7280b263bd522599988086c093e7dfe7e",
      "parents": [
        "aa0e56f9f2f353f969a7230eb8d038fffff4d6da",
        "06f9ebf4f6178d6b6970cace263ee180d4b61d36"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Dec 14 15:51:32 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 14 15:51:32 2010 -0800"
      },
      "message": "Merge \"minor clean-up. SurfaceFlinger doesn\u0027t need libpixelflinger.so.\""
    },
    {
      "commit": "aa0e56f9f2f353f969a7230eb8d038fffff4d6da",
      "tree": "87df07b03fcce81cdbcfb5551922edd4d6772055",
      "parents": [
        "ab9b6285a06f15b2dfc961e56acfb00d5c600a7f",
        "f7d63cf2cbab403b14778ec45839107078e20824"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Dec 14 15:51:22 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 14 15:51:22 2010 -0800"
      },
      "message": "Merge \"dump callstack on Surface use error\""
    },
    {
      "commit": "06f9ebf4f6178d6b6970cace263ee180d4b61d36",
      "tree": "9abc50dcbf3cee3ba65dc95bf59f9eb647a208c3",
      "parents": [
        "f7d63cf2cbab403b14778ec45839107078e20824"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Dec 13 16:47:31 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Dec 13 16:47:31 2010 -0800"
      },
      "message": "minor clean-up. SurfaceFlinger doesn\u0027t need libpixelflinger.so.\n\nChange-Id: I3bdca74351c8e480a05084bc412a96c5f685221d\n"
    },
    {
      "commit": "3dd25a6bf71bd535bf9dbbe16234229ff45414a0",
      "tree": "16194108cb3fdc84bd42631d81eaf1a518cfecb9",
      "parents": [
        "957d85ec046651a8b0549b62021079ddcc0b8f53"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Dec 10 16:22:31 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Dec 10 16:22:31 2010 -0800"
      },
      "message": "[3258939] Need snapshot to limit which layers are included\n\nChange-Id: Id7351a0e3f53dde99b291cffba553d89fd4d7ca9\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": "d2112306330ce0c162bee4b864991962ca2b655a",
      "tree": "d169f93867e853220c40d38826fe81b4a1ad9eff",
      "parents": [
        "ff3c470778a69d262470e9707fce58dd485c6cc9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Dec 07 19:38:17 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Dec 08 16:13:59 2010 -0800"
      },
      "message": "remove support for PUSH_BUFFER surfaces and overlays\n\nthe same functionality is now supported through\nthe h/w composer HAL, and YUV support in the GPU.\n\nChange-Id: I8146605449954b8e8fd7f78810b7d873c2d8f5bf\n"
    },
    {
      "commit": "6c925d00e131e40811897e0ddc332d6f5bc83178",
      "tree": "813fca5b0cff6cdc7e2a6c15a12b3ae777b12d3d",
      "parents": [
        "0b440fc34da7f53fcec24cc8c907b959218b957d"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Tue Nov 02 11:51:32 2010 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Nov 11 14:06:38 2010 -0800"
      },
      "message": "Implement reducing the buffer count of a Surface.\n\nChange-Id: I7f979c60c06d654aa8265002836277434bc1a64f\nBug: 3095167\n"
    },
    {
      "commit": "0b440fc34da7f53fcec24cc8c907b959218b957d",
      "tree": "0200cacdea2ebbc91e58ab0b706d597c719624df",
      "parents": [
        "0996daa748083507f276617b1fb739414c594ae6"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Tue Nov 09 18:01:27 2010 -0800"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Nov 11 13:41:43 2010 -0800"
      },
      "message": "Fix a compile warning in the Surface class.\n\nChange-Id: Id744e71d2cd23c287925a5090e13a6d9908cdd99\n"
    },
    {
      "commit": "32b1dd2632b2424fa4686418af622bab6b5d5cbd",
      "tree": "1fbea27f3c9857d81005e0e7c2256904b8742e3d",
      "parents": [
        "49d1735482dbcb017775b1807847e943f0a5152c",
        "85c5ca07b9c6e58337a149d36bc3cecbdb879046"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Oct 26 12:26:23 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 26 12:26:23 2010 -0700"
      },
      "message": "am 85c5ca07: am 2f19f56a: Merge \"Updade Surface (ANativeWindow) format based on its buffers format\" into gingerbread\n"
    },
    {
      "commit": "b9737a1d1b9eb24cab18a6f50659a43c8bca79be",
      "tree": "e2852ec578389d66a4ad592c109a7697c8306924",
      "parents": [
        "3026a1c4e88412b7fe997f93fedba871d79a03cd"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 25 16:29:24 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 25 17:08:37 2010 -0700"
      },
      "message": "Updade Surface (ANativeWindow) format based on its buffers format\n\nthis is to allow applications to change the format of a surface\u0027s\nbuffer, and have it reflected in EGL; which is needed for\nEGLConfig validation.\n\nChange-Id: Iee074c30ad765881e2409c1d37450b05e561c44d\n"
    },
    {
      "commit": "99e3fab534d3a489726665cb8c71edecd5798b04",
      "tree": "86bb8ed74070ebc7bf2f92b0908a2c2959e25217",
      "parents": [
        "a4a2a3aaef730dbab020f7ece09149b05a399000",
        "5bfa3a34eaef759c3ec4def76f646eb1c0bf997f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Oct 15 08:33:43 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 15 08:33:43 2010 -0700"
      },
      "message": "am 5bfa3a34: am 011b5bcc: Merge \"implement part of [3094280] New animation for screen on and screen off add support for screen on animation\" into gingerbread\n\nMerge commit \u00275bfa3a34eaef759c3ec4def76f646eb1c0bf997f\u0027\n\n* commit \u00275bfa3a34eaef759c3ec4def76f646eb1c0bf997f\u0027:\n  implement part of [3094280] New animation for screen on and screen off\n"
    },
    {
      "commit": "eb86aaaab34687a77454fa130b08788db1317d74",
      "tree": "6a0b8bd8dc7d3bb45511902d5d6fba012a3c8b43",
      "parents": [
        "4afdf666fdb034834c48445570ed9d6f4133fc71",
        "9a12a3c8d4bb20042cf69e07d268e3a04ac71f96"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Oct 13 23:34:21 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 13 23:34:21 2010 -0700"
      },
      "message": "am 9a12a3c8: am ba799098: Merge changes I76513387,I335fb671 into gingerbread\n\nMerge commit \u00279a12a3c8d4bb20042cf69e07d268e3a04ac71f96\u0027\n\n* commit \u00279a12a3c8d4bb20042cf69e07d268e3a04ac71f96\u0027:\n  Remove dead code, and make the animation a setting.\n  turn off the electron beam\n"
    },
    {
      "commit": "2d2b803a92ba531cf6c4bb7042326653255b8780",
      "tree": "4f9bfc77e4850d74b260dff622d03a175add6840",
      "parents": [
        "e03471e12f1adcd818b5bfd9dcb894c75fe955c5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Oct 12 16:05:48 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 13 14:28:26 2010 -0700"
      },
      "message": "implement part of [3094280] New animation for screen on and screen off\nadd support for screen on animation\n\nChange-Id: If50cf52ae04b95b42da7d74cf7fa96d5cb54d238\n"
    },
    {
      "commit": "aab758e87991d1460ca94d4a5f22c0ef34641e2d",
      "tree": "560d9e47119175b6a5618dd16d9d9ac4a92145fd",
      "parents": [
        "844a6b3ccaff1ad1443ad985e4527b733ce97c0e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 11 12:37:43 2010 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Tue Oct 12 14:16:11 2010 -0700"
      },
      "message": "turn off the electron beam\n\nChange-Id: I335fb6719f1d5a3f1c6f37a046fd1c2c4ed2bbc6\n"
    },
    {
      "commit": "1ef773ff9caf9c1b9ee32b634f1c80e9a065aa6a",
      "tree": "9f00c524f8d91b21fe99ce89c3a1d703fb236b1d",
      "parents": [
        "d6e9d7695b55414420c366528ba431eacdea5dfc"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Oct 07 13:46:55 2010 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Sun Oct 10 13:09:46 2010 -0700"
      },
      "message": "Move binder magic from the Surface class to GraphicBuffer.\n\n- Register buffers with Gralloc when unflattening a GraphicBuffer (rather than\ndoing it in the Surface class).\n- Add support for a GraphicBuffer that wraps an android_native_window_t*.\n\nChange-Id: I029ac086111bbac800e5ca37eb505f558b718cd8\n"
    },
    {
      "commit": "499f518400d54f2f14753a674edd95c5bb11acfd",
      "tree": "4a985755f7752b22cdea5d7cbaa4f5417d53da65",
      "parents": [
        "7930b5bc068e92a1eaaa6c890b77aebbdf01e259",
        "ff04e97faf75c435e453d4c1caf7eeac8b9c1ceb"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 06 17:07:39 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 06 17:07:39 2010 -0700"
      },
      "message": "am ff04e97f: am f4619308: Merge \"fix [2835280] Add support for cancelling buffers to ANativeWindow\" into gingerbread\n\nMerge commit \u0027ff04e97faf75c435e453d4c1caf7eeac8b9c1ceb\u0027\n\n* commit \u0027ff04e97faf75c435e453d4c1caf7eeac8b9c1ceb\u0027:\n  fix [2835280] Add support for cancelling buffers to ANativeWindow\n"
    },
    {
      "commit": "8ddd2c72ee7dd6f45e5375a197774b8671b982b7",
      "tree": "b3a346d011b76c96b986f831036ff95652f067cf",
      "parents": [
        "19058877df9bf94f197a72855f810f7f6bf8d068"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Oct 01 16:22:41 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 04 20:10:11 2010 -0700"
      },
      "message": "fix [2835280] Add support for cancelling buffers to ANativeWindow\n\nThere is a new ANativeWindow::cancelBuffer() API that can be used to\ncancel any dequeued buffer, BEFORE it\u0027s been enqueued. The buffer is\nreturned to the list of availlable buffers. dequeue and cancel are not\nmutually thread safe, they must be called from the same thread or\nexternal synchronization must be used.\n\nChange-Id: I86cc7985bace8b6a93ad2c75d2bef5c3c2cb4d61\n"
    },
    {
      "commit": "597c7f67b5f2491c6098a1de241a3f0fd274688a",
      "tree": "841774d2e67bfced0608d2344868c64ac566004e",
      "parents": [
        "541d942000c338a15dc4b361b15b72864640d2bf"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 29 13:02:36 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 04 17:36:17 2010 -0700"
      },
      "message": "refactored screenshot code\n\nthe core screenshot function now can capture the screen at any lower resolution\nperforming bilinear filtering.\n\nwe also now have some client code to interface with the screenshot service.\n\nit\u0027s now possible to request a screenshot at a lower resolution.\n\nChange-Id: I33689bba98507ab928d0898b21596d0d2fe4b953\n"
    },
    {
      "commit": "38ed2e39c54a42dda8f00620f960788f569a3698",
      "tree": "bf7d48a3bb3c372e7348cab154cb73301ce4a87f",
      "parents": [
        "e17c054d34676c25f03b4eb0d8daebe41b84bf6e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 29 13:02:36 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 29 16:55:15 2010 -0700"
      },
      "message": "refactored screenshot code\n\nthe core screenshot function now can capture the screen at any lower resolution\nperforming bilinear filtering.\n\nwe also now have some client code to interface with the screenshot service.\n\nit\u0027s now possible to request a screenshot at a lower resolution.\n\nChange-Id: I5a3b0e431421800e3aad601d9af8f94adffbc71f\n"
    },
    {
      "commit": "d95fec08916698f7bdd9f4b293d418ae4b4f60c5",
      "tree": "d41977f1c885afe6749debec7b6caff27b09e12b",
      "parents": [
        "960099572d97df03786927974e760070fca3e1ef",
        "495ad4f22096aa172d025c16c25497e7dad8f2bd"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Sep 24 18:13:22 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 24 18:13:22 2010 -0700"
      },
      "message": "am 495ad4f2: am beabe75a: Merge changes I1f7c4535,I741c68a2 into gingerbread\n\nMerge commit \u0027495ad4f22096aa172d025c16c25497e7dad8f2bd\u0027\n\n* commit \u0027495ad4f22096aa172d025c16c25497e7dad8f2bd\u0027:\n  simple test app for screen capture API\n  add support for [1974164] Be able to take a screen shot on the device\n"
    },
    {
      "commit": "ca5edbeba92b96913291792a4df984e158853b6d",
      "tree": "cef0f4174ca3d5e09a767787eec63b7a0cf7f2cf",
      "parents": [
        "5c6c5c7a43d44316395f5c35ab713372124b8b4c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Sep 24 11:26:58 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Sep 24 14:56:39 2010 -0700"
      },
      "message": "add support for [1974164] Be able to take a screen shot on the device\n\nscreenshots are taken using ISurfaceComposer::captureScreen() which returns\nthe size of the screenshot and an IMemoryHeap containing the data.\nscreenshots have limitations:\n- they will always fail if a secure window is up on screen\n- require GL_OES_framebuffer_object extension\n- in some situation, video planes won\u0027t been captured\n\nChange-Id: I741c68a2d2984fb139039301c3349e6780e2cd58\n"
    },
    {
      "commit": "a5ab8ce602ecfd897805e185c89a6eff0c78aabe",
      "tree": "e393ed7e14ae9a42faaf542ccdeda36f6cacf7fa",
      "parents": [
        "19c5df745229374748f38c76a222ec8ce1d08e81",
        "48a862407dda482450bdfd5aa2a2cd8b3e8e38dd"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 15 12:29:18 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 15 12:29:18 2010 -0700"
      },
      "message": "resolved conflicts for merge of 48a86240 to master\n\nChange-Id: I2305fef9f4dd46183337217d822df3c675b6b6e5\n"
    },
    {
      "commit": "04262e9f842edf20168399b6a70f0d67e518fe69",
      "tree": "dd2c01550c43c4658f78d87a60d8d8407af9afe9",
      "parents": [
        "cc5494c9996f809e36539b24e8b6b67683383d29"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 13 22:57:58 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 13 23:16:58 2010 -0700"
      },
      "message": "Add logging of various important graphics events\n\nThere are 16 events logged in the event log:\nSF_APP_DEQUEUE_BEFORE\nSF_APP_DEQUEUE_AFTER\nSF_APP_LOCK_BEFORE\nSF_APP_LOCK_AFTER\nSF_APP_QUEUE\n\nSF_REPAINT\nSF_COMPOSITION_COMPLETE\nSF_UNLOCK_CLIENTS\nSF_SWAP_BUFFERS\nSF_REPAINT_DONE\n\nSF_FB_POST_BEFORE\nSF_FB_POST_AFTER\nSF_FB_DEQUEUE_BEFORE\nSF_FB_DEQUEUE_AFTER\nSF_FB_LOCK_BEFORE\nSF_FB_LOCK_AFTER\n\nall events log the buffer conserned and a timestamp in microseconds.\n\nby default the logging is not enabled, to turn it on:\nadb shell service call SurfaceFlinger 1006 i31 1\nadb shell setprop debug.graphic_log 1\n\nThe effect is immediate in SurfaceFlinger, but applications need to be\nrestarted.\n\nChange-Id: Ifc2e31f7aed072d9a7dede20ff2ce59231edbec1\n"
    },
    {
      "commit": "54c4bf27437b8d7f8d2a494acd9de53d55696dea",
      "tree": "0045c300c5f2cbd1ddb2756a31f79b80fa7b0eb3",
      "parents": [
        "4dcea37d48cc25d5e5e5cc56f7ca3d90d4efd49d",
        "d322d16323176ddd5fef3383798176f64d0078c8"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Aug 27 16:18:12 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 27 16:18:12 2010 -0700"
      },
      "message": "am d322d163: am ae66946b: Merge \"fix a race in SF buffer management\" into gingerbread\n\nMerge commit \u0027d322d16323176ddd5fef3383798176f64d0078c8\u0027\n\n* commit \u0027d322d16323176ddd5fef3383798176f64d0078c8\u0027:\n  fix a race in SF buffer management\n"
    },
    {
      "commit": "c9289fa1c4d3aeba5122863cdae7d0a9806d8833",
      "tree": "85f164c24002d615746a906b8862e222593ebb8f",
      "parents": [
        "ed101933ab7506d841d6eaa7bebda4b674c38088"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 26 17:42:27 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 26 17:42:27 2010 -0700"
      },
      "message": "fix a race in SF buffer management\n\nalso remove some unused code.\n\nChange-Id: Iae2c3309b7a08055f3e13a5b866c5c084993e352\n"
    },
    {
      "commit": "bce2e90ca9bc2277a4816b7996f84506df411cf9",
      "tree": "2a1902282acfebe7f68a202a4c43ffbeb0e9df6d",
      "parents": [
        "8d9d751a8f09a0199d1d22a3f8267eb51f919cc0",
        "bc4389edfbb5777aec1a9af7863b2ca3ade2fa64"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 24 17:56:40 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Aug 24 17:56:40 2010 -0700"
      },
      "message": "am bc4389ed: am 8395b462: Merge \"fix [2931513] Add support for setting the orientation of an ANativeWindow\" into gingerbread\n\nMerge commit \u0027bc4389edfbb5777aec1a9af7863b2ca3ade2fa64\u0027\n\n* commit \u0027bc4389edfbb5777aec1a9af7863b2ca3ade2fa64\u0027:\n  fix [2931513] Add support for setting the orientation of an ANativeWindow\n"
    },
    {
      "commit": "e96aa3e859cb747e241dfa2999fcd142a688ed57",
      "tree": "8b725f12dd84b37345eebaa40951bc401b2e0a3f",
      "parents": [
        "0c76c7c5eedf90b5fa1a95b6a9944b4e58747007"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 19 17:01:19 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 24 15:40:50 2010 -0700"
      },
      "message": "fix [2931513] Add support for setting the orientation of an ANativeWindow\n\nAlso implement support for cropping.\n\nChange-Id: Iba5888dd242bf2feaac9e9ce26e404c1f404c280\n"
    },
    {
      "commit": "85cfdd011241a5f2fb7fabc65b5943a39af7e1de",
      "tree": "556bd6f34ae8d300d9fa05fe46bb0dc4d8aa43e0",
      "parents": [
        "7fdaa2329e755c0e5c25724a43b8c361b88e9623"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Tue Aug 10 16:37:53 2010 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Aug 23 14:31:30 2010 -0700"
      },
      "message": "Change the framework to use the new camera preview path.\n\nThis change makes the camera HAL interface take an ANativeWindow interface from\nwhich all the camera preview buffers will be allocated.  The framework code\nrunning in application processes now passes a Surface object rather than an\nISurface to the camera server via Binder when setting the preview surface.  The\ncamera server then forwards that Surface object (which implements the\nANativeWindow interface) to the camera HAL, which uses it to communicate with\nSurfaceFlinger to allocate the camera preview buffers.\n\nChange-Id: Ie438f721559cd7de5e4f848a26d96360dda07b5f\n"
    },
    {
      "commit": "51c70e3e41ee8bedc1d951a06a74202dafa13009",
      "tree": "d917c80c3421a1312cfefc3e2ca7db25fce62a37",
      "parents": [
        "eab07e5c1d48d45f76ac2dd4a45c8a3457aa290d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jul 27 20:11:35 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jul 27 20:11:35 2010 -0700"
      },
      "message": "fix [2873058] Surface::dequeueBuffer blocks on last buffer, i.e. cannot dequeue all allocated buffers at once.\n\nthis situation happened when the last buffer needed to be resized\n(or allocated, the first time). the assumption was that the buffer\nwas in use by SF itself as the current buffer (obviously, this\nassumption made no sense when the buffer had never been allocated, btw).\n\nthe system would wait until some other buffer became the \"front\" buffer.\n\nwe fix this problem by entirely removing the requirement that the\nbuffer being resized cannot be the front buffer. instead, we just\nallocate a new buffer and replace the front buffer by the new one.\n\nthe downside is that this uses more memory (an extra buffer) for a\nbrief amount of time while the old buffer is being reallocated and\nbefore it has actually been replaced.\n\nChange-Id: I022e4621209474ceb1c671b23deb4188eaaa7285\n"
    },
    {
      "commit": "ff7049ab2886acc73e145367118646f7741ce333",
      "tree": "a57f82a48605aca4b9a40b95028efa976742d4b3",
      "parents": [
        "a5fe776a7933b2241858ef83f01b812c7badc231"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Jul 19 16:09:26 2010 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Jul 19 16:09:26 2010 -0700"
      },
      "message": "Remove some debug logging that I accidentally committed.\n\nChange-Id: Ib182455fad5e5b3f3f59b3ff24f59dcd7f638292\n"
    },
    {
      "commit": "5ee65f0d441ca558bc95b60c1468f2aadfeeddbd",
      "tree": "fe143a0721ac44a3d2c34a46ad5240ea2d586f76",
      "parents": [
        "eec69d2923636b2aaa51df93bacc2b3bbb742736"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Jul 15 17:29:15 2010 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Fri Jul 16 13:03:15 2010 -0700"
      },
      "message": "Re-use existing Surface objects when reading them from parcels.\n\nThis change adds a process-global cache of previously deserialized Surface\nobjects so that if a Surface object wrapping the same ISurface gets received\nagain the same Surface can be used.  This is important because the \u0027tail\u0027\npointer in the SharedBufferClient is stored only on the client side, and needs\nto be the same for all the Surface objects wrapping an ISurface instance.  This\nsolves the problem by making there only be one Surface object wrapping an\nISurface per process.\n\nChange-Id: I4bf0b8787885c56277622fca053022d2bb638902\n"
    },
    {
      "commit": "8b49bd1a2f8117e1c22884f0150e72cbcf838f32",
      "tree": "ec6e43ed118268b09cbb61c8eed02c757e9602ed",
      "parents": [
        "3c80a4a044865bdf1289c7896baffa1c082d835c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 30 13:56:17 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 30 15:32:04 2010 -0700"
      },
      "message": "Introduce official public NativeWindow type.\n\nNot yet hooked up to anything in the NDK, but requires renaming\nthe existing android_native_window_t type everywhere.\n\nChange-Id: Iffee6ea39c93b8b34e20fb69e4d2c7c837e5ea2e\n"
    },
    {
      "commit": "5e14010b1fc066dfcbc0a577d59492687c99667d",
      "tree": "221d256bf258e97b3e7e7c953a679a9104792374",
      "parents": [
        "1debc66521f699bbf0a8eb80cababaef8bc63607"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 08 19:54:15 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 08 20:10:02 2010 -0700"
      },
      "message": "allow re-targetting of surfaces\n\nSurfaces can now be parcelized and sent to remote\nprocesses. When a surface crosses a process\nboundary, it looses its connection with the\ncurrent process and gets attached to the new one.\n\nChange-Id: I39c7b055bcd3ea1162ef2718d3d4b866bf7c81c0\n"
    },
    {
      "commit": "1debc66521f699bbf0a8eb80cababaef8bc63607",
      "tree": "718d23f3d018d6d30c2428cd121464cab6ff85bc",
      "parents": [
        "c44c4742e7d79f6fe846f807bb26ad8b3cd16f68"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 08 15:40:56 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 08 15:40:56 2010 -0700"
      },
      "message": "fix [2751143] Device crashes when in a text box for too long"
    },
    {
      "commit": "fae5cb2b356a1fef172b43066180a7ab4c32dbac",
      "tree": "55e73b81c3a666ab1165603238e7ca43495ff99c",
      "parents": [
        "7623da435e45c7c03ef6a00a43675deb6645f070"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 04 18:26:32 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 04 18:57:41 2010 -0700"
      },
      "message": "optimize Surface.readFromParcel()\n\nthis is called for each relayout() and used to create a full Surface (cpp)\nwhich in turn did some heavy work (including an IPC with surfaceflinger),\nmost of the time to destroy it immediatelly when the returned surface\n(the one in the parcel) was the same.\n\nwe now more intelligentely read from the parcel and construct the new\nobject only if needed.\n\nChange-Id: Idfd40d9ac96ffc6d4ae5fd99bcc0773e131e2267\n"
    },
    {
      "commit": "7623da435e45c7c03ef6a00a43675deb6645f070",
      "tree": "b789cdc5e60ccc4474bd319b1dbb4e1a7e3f3858",
      "parents": [
        "593c05ce7bcf7b6d94bd8c50da2b818cf05116b1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 01 15:12:58 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 04 18:57:41 2010 -0700"
      },
      "message": "split surface management from surface\u0027s buffers management\n\nChange-Id: If3c5655d1231f8f0c49ba68f972b1b20c93b3f87\n"
    },
    {
      "commit": "770492cb2b19f6a36ad748cd05fbedfbb9a67dfa",
      "tree": "3c87a789492e52b3c26b1de9608f42690b86c2cd",
      "parents": [
        "cdfd5fe2c89a30a31f9de5a5481e8997f014a89b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 28 14:22:23 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 28 17:19:16 2010 -0700"
      },
      "message": "more clean-up in preparation of bigger changes\n\nthe most important change here is the renaming of\nISurfaceFlingerClient to ISurfaceComposerClient\n\nChange-Id: I94e18b0417f50e06f21377446639c61f65f959b3\n"
    },
    {
      "commit": "c7b388c2b3a9558c85e3730a7c6b261392ce493e",
      "tree": "38725561e04c5e754c0c3b2a240a507ea98f6cf4",
      "parents": [
        "df0364de6f7be68e003729c262fe2731b82ae10e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 27 19:41:15 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 27 19:55:43 2010 -0700"
      },
      "message": "more clean-up of Surfaceflinger\u0027s client management\n\nSurfaceComposerClient now only exist on the WindowManager side,\nthe client side uses the new SurfaceClient class, which only\nexposes what a client needs.\n\nalso instead of keeping mappings from IBinder to SurfaceComposerClients\nwe have a SurfaceClient per Surface (referring to the same IBinder), this\nis made possible by the fact that SurfaceClient is very light.\n\nChange-Id: I6a1f7015424f07871632a25ed6a502c55abfcfa6\n"
    },
    {
      "commit": "663baddda9de01d0a7eccffaeb7ce39899e95146",
      "tree": "31f08ccadbdb385ab1920e0ced067f21d49f5d78",
      "parents": [
        "64f7549b0e0e2b77e698ae88389465342d3f28d7"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 21:31:09 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 21:31:09 2010 -0700"
      },
      "message": "oopsie. forgot to displatch SET_BUFFERS_GEOMETRY\n"
    },
    {
      "commit": "2ce19af45bf4c5e311a73df474ffe88d96d118c5",
      "tree": "3df75d3e86308a618a3ddc47d301731af30769a8",
      "parents": [
        "d6ddcb7f00a7af95b452233d965b922632f78f21"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 25 17:51:34 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 25 17:51:34 2010 -0700"
      },
      "message": "fix [2712278] The preview buffer left some black borders in left and bottom edges\n\nwe were incorrectly flagging push_buffer surfaces as invalid\n\nChange-Id: I4dfd4ffbbe8a71f7e23e835db8d71966416c29bb\n"
    },
    {
      "commit": "2be352adab7f11646fda7c0240e496bbb37f7bd1",
      "tree": "e7a168546a256cd4f7c57261690796cf527ae8a2",
      "parents": [
        "57d89899c9fb978a1c097f298aa94c5db1f61bb6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 21 17:24:35 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 24 18:26:01 2010 -0700"
      },
      "message": "added the notion of fixed-size buffers\n\nthe new native_window_set_buffers_geometry allows\nto specify a size and format for all buffers to be\ndequeued. the buffer will be scalled to the window\u0027s\nsize.\n\nChange-Id: I2c378b85c88d29cdd827a5f319d5c704d79ba381\n"
    },
    {
      "commit": "57d89899c9fb978a1c097f298aa94c5db1f61bb6",
      "tree": "85e1c021f67a2fdb5ed33547872a769b7d55fba6",
      "parents": [
        "884372842bac11f854aa42a9c4de05a3a22cb11f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 21 14:51:33 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 24 13:47:24 2010 -0700"
      },
      "message": "fix a bug when reallocating a window\u0027s buffers is needed\n\nwe need to mark the buffers that need to be reallocated,\nNOT the buffer\u0027s indices.\n\nChange-Id: I809e2e1b03b56c4d2ab983c25523dae99aa1da74\n"
    },
    {
      "commit": "25f0bdaea6d1a34aae3faf6688cad4fbebcca969",
      "tree": "8600372f2cb6f54254d2c7e0f7018c039e07c4b6",
      "parents": [
        "4f5f2786b2c850ad0d772c7707ddbe55c3b7adf6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 21 14:19:50 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 21 14:34:32 2010 -0700"
      },
      "message": "added native_window_set_buffer_count()\n\nthis method can be used to change the number of buffers\nassociated to a native window. the default is two.\n\nChange-Id: I608b959e6b29d77f95edb23c31dc9b099a758f2f\n"
    },
    {
      "commit": "898c4c91be8e11b6d5388c623ae80f12ac25fd27",
      "tree": "8f59a103707c25a05bcf4fa074e944e766c15503",
      "parents": [
        "66c46a6bd15422fe898d533d1350d6df748dd95b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 18 17:06:55 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 20 18:00:42 2010 -0700"
      },
      "message": "fix the threading issue for setBuffercount()\n\nthis change introduces R/W locks in the right places.\non the server-side, it guarantees that setBufferCount()\nis synchronized with \"retire\" and \"resize\".\non the client-side, it guarantees that setBufferCount()\nis synchronized with \"dequeue\", \"lockbuffer\" and \"queue\"\n"
    },
    {
      "commit": "35b1a93d1925fbae83c654e627647b66539b8d90",
      "tree": "a6f277c93bbb186bc1cf797d62d72c3f56551172",
      "parents": [
        "662be102ee3a89645ca60650a6094003f35894e0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 20:08:22 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 20:08:22 2010 -0700"
      },
      "message": "add a few tests to SharedBufferStackTest\n\nChange-Id: I1c46c07aa1483aee4d4ebd8745638a2c462cc1b3\n"
    },
    {
      "commit": "662be102ee3a89645ca60650a6094003f35894e0",
      "tree": "1476092bbc6c60e1e588ad767b85e15e4b48bfc2",
      "parents": [
        "be6c8fc4d5f8144cbfc715da0d2ef3c704db279d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 18:56:10 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 18:56:10 2010 -0700"
      },
      "message": "improve SharedBufferStack test\n\nChange-Id: I32683bfe0916918757280db89113595867acd5a7\n"
    },
    {
      "commit": "be6c8fc4d5f8144cbfc715da0d2ef3c704db279d",
      "tree": "94899c9146765d814bf7bb81e1e7a2954ad24499",
      "parents": [
        "cd30f4f849bb215509bd2645726048271b5db01e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 18:54:19 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 18:54:19 2010 -0700"
      },
      "message": "fix a bug where queueBuffer() would fail after the SharedbufferStack is resized\n\nChange-Id: I12bf13a62018ce1349bab7be0b0cad7fad13fee8\n"
    },
    {
      "commit": "cd30f4f849bb215509bd2645726048271b5db01e",
      "tree": "6182174b30879d9bbee5532faa2b098b9c81715c",
      "parents": [
        "c5859388bd6c666a83017869bf8a9935defe0bd0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 17:27:26 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 17:27:26 2010 -0700"
      },
      "message": "fix some bugs in SharedBufferStack::resize\n\nadded buffers should now be labeled properly.\n\nChange-Id: I28aa753fbe89ab89134e7753575319478934c7fa\n"
    },
    {
      "commit": "7450c02a35d7c1f8580f906d6f1c1a11bc5c4fd0",
      "tree": "220d07ff6bd81691db9f8089e2f44c520845d9b5",
      "parents": [
        "b42bc06675174d58dabc5efc032cfc43dac10393",
        "900b6157f5dee2ed7b2c73cf320b2baf293230ff"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 15:12:17 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 14 15:12:17 2010 -0700"
      },
      "message": "am 900b6157: merge from open-source master\n\nMerge commit \u0027900b6157f5dee2ed7b2c73cf320b2baf293230ff\u0027 into kraken\n\n* commit \u0027900b6157f5dee2ed7b2c73cf320b2baf293230ff\u0027:\n  Only hold a weak pointer on SurfaceComposerClients\n"
    },
    {
      "commit": "900b6157f5dee2ed7b2c73cf320b2baf293230ff",
      "tree": "15fabaeae78d67b8ee40afa76c5fabff20582d2b",
      "parents": [
        "fb580943133d3e9ad3e342b8038726b04686f283",
        "5b9fb5ab7ee81fc9b22f9aaea478db65e9b56c43"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 15:04:52 2010 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 15:04:52 2010 -0700"
      },
      "message": "merge from open-source master\n\nChange-Id: I0249c6d796b35af9ba08cbccd463a1f5cf779ecd\n"
    },
    {
      "commit": "59751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4b",
      "tree": "a1f1d7119a8109d06cfc2f24b26284ff7627de7a",
      "parents": [
        "9f2c4fd9a14ea79e4cbbd3ab8925794711a6411c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 07 15:58:44 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 12 17:28:20 2010 -0700"
      },
      "message": "SharedBufferStack now can grow up to 16 buffers.\n\nthere is a new resize() api, which currently only allows growing.\n\nChange-Id: Ia37b81b73be466d2491ffed7f3a23cd8e113c6fe\n"
    },
    {
      "commit": "9f2c4fd9a14ea79e4cbbd3ab8925794711a6411c",
      "tree": "59ef7201919232e3fe9b0bd044339608db459128",
      "parents": [
        "aca2ee8a7045e6b3d0399736d7d1adf7e1dbf825"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 10 20:06:11 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 12 17:26:22 2010 -0700"
      },
      "message": "Refactor some code in surfaceflinger in preparation of upcoming changes\n\nthe new TextureMagager class now handle texture creation and upload\nas well as EGL image creation and binding to GraphicBuffers. This is\nused indirectly by Layer and directly by LayerBuffer\n\nthe new BufferManager class handles the set of buffers used for a\nLayer (Surface), it abstracts how many buffer there is as well as\nthe use of EGLimage vs. regular texture ops (glTexImage2D).\n\nChange-Id: I2da1ddcf27758e6731400f6cc4e20bef35c0a39a\n"
    },
    {
      "commit": "3b91e13ec7cdf7d607a221feda2eb0afc1e02050",
      "tree": "3aeeb3c837519b517f370add6b09cd60c64e9831",
      "parents": [
        "1bb8b670f99c1029def72ec408142077abd66cc4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 30 12:59:21 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 30 13:05:36 2010 -0700"
      },
      "message": "make sure the server-side validates pointers/indices visible on the client side\n\nChange-Id: I604f58d3fcd2d09ec7998123c627401081345cd6\n"
    },
    {
      "commit": "bfe7f0b12165a1ad4a73b6d8f013cb9e115a3c60",
      "tree": "0d55794a9fa47b81998aae8c2abb6c7f0af8ee76",
      "parents": [
        "f590f702c8142fa5225a6d2ea6649515c1a2961f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 27 21:08:20 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 28 16:12:54 2010 -0700"
      },
      "message": "Add support for enqueuing buffers in arbitrary order\n\nAlso added a very simple SharedBufferStack unit test.\n\nChange-Id: I253dbbe98a53c966b78d22d4d6dd59f8aefc8c40\n"
    },
    {
      "commit": "f590f702c8142fa5225a6d2ea6649515c1a2961f",
      "tree": "5165d6b04f34f8b90d36bbec3cc9949aa69f2fd6",
      "parents": [
        "c54c12713b98f308f848d2eb9ed7ef28ecc62c55"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 27 16:41:19 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 28 16:12:54 2010 -0700"
      },
      "message": "cleanup. waitForCondition() now uses polymorphsim instead of templtes\n\nthe reason for the above change is that waitForCondition() had become\nlarge over time, mainly to handle error cases, using inlines to\nevaluate the condition doesn\u0027t buys us much anymore while it increases\ncode size.\n\nChange-Id: I2595d850832628954b900ab8bb1796c863447bc7\n"
    },
    {
      "commit": "c54c12713b98f308f848d2eb9ed7ef28ecc62c55",
      "tree": "cee4c74a6421cd6b128ed3c2538c836469c6ba06",
      "parents": [
        "3fd6419fe542c4ecb8e838d1754a83ce8591b288"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 27 16:11:38 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 28 16:12:54 2010 -0700"
      },
      "message": "fix a race condition in undoDequeue(), where \u0027tail\u0027 could be computed incorrectly.\n\nin the undoDequeue() case, \u0027tail\u0027 was recalculated from \u0027available\u0027 and \u0027head\u0027\nhowever there was a race between this and retireAndLock(), which could cause\n\u0027tail\u0027 to be recalculated wrongly.\n\nthe interesting thing though is that retireAndLock() shouldn\u0027t have any impact\non the value of \u0027tail\u0027, which is client-side only attribute.\nwe fix the race by saving the value of \u0027tail\u0027 before dequeue() and restore it\nin the case of undoDequeue(), since we know it doesn\u0027t depend on retireAndLock().\n\nChange-Id: I4bcc4d16b6bc4dd93717ee739c603040b18295a0\n"
    },
    {
      "commit": "a8a0aa8b922c45fb4633f51610f264a19f9bd825",
      "tree": "367c5b004195a5dbdca46e5f4049b029d3e570c9",
      "parents": [
        "a8624186a6f7a29697bf5a112e46a80ca796c9c5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 21 15:24:11 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 21 22:25:35 2010 -0700"
      },
      "message": "better fix for [2420565] Surface.lockCanvas() updates the dirty region too often\n\nChange-Id: I83438b40effd21538f1c74396dc665254b9d5ab6\n"
    },
    {
      "commit": "16a86ee30b70aea8c254b836c708f54a608d25f3",
      "tree": "9e30bb72015eeaedcc5c7d9f8303cebd2cc3e07f",
      "parents": [
        "6bb5ebaa0305a30b5037f6533b3b989e0437d26c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 15 18:48:26 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 13:36:29 2010 -0700"
      },
      "message": "added setCrop() to android_native_window_t\n\nhooked up the new method up to Surface.cpp\nthe actual crop is not implemented in SF yet\n\nChange-Id: Ic6e313c98fd880f127a051a0ccc71808bd689751\n"
    },
    {
      "commit": "6bb5ebaa0305a30b5037f6533b3b989e0437d26c",
      "tree": "68048832ea2c2560a94bf506647e9fee0357f548",
      "parents": [
        "796c5fc6abf01b1864223156d578288657fe9923"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "pixelflinger@google.com",
        "time": "Mon Apr 05 16:21:53 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 13:36:29 2010 -0700"
      },
      "message": "add support for up to 16 buffers per surface\n\nalso increase the dirtyregion size from 1 to 6 rectangles.\nOverall we now need 27KiB process instead of 4KiB\n\nChange-Id: Iebda5565015158f49d9ca8dbcf55e6ad04855be3\n"
    },
    {
      "commit": "db3647ff4f1266e505e8d6406ba697b48d609a97",
      "tree": "d6b00a57ede9da32bd6061ea892babd012874fcb",
      "parents": [
        "b059dc9c89c08be299ffc424340a2ec85cb39a5b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 08 18:34:07 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 08 19:09:04 2010 -0700"
      },
      "message": "fix [2420565] Surface.lockCanvas() updates the dirty region too often\n\nThere was a bug where we were we could be reallocating buffers for no reason.\n\nChange-Id: Ieb8a81a289da9339ab7faf987cd3a73428943c1a\n"
    },
    {
      "commit": "a729f97e8bfba67a94b1cde26d0d78d84528de85",
      "tree": "348c44f823825856df69b8b8e640bc86146a438f",
      "parents": [
        "078fd47e91d495175927d1a4a8b9aad039a7ba4e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 19 16:14:13 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 19 16:16:43 2010 -0700"
      },
      "message": "libutils Condition are now PRIVATE by default\n\nCondition must be initialized with SHARED for the old behavior, where\nthey can be used accross processes.\n\nUpdated the two places android that require SHARED conditions.\n\nPRIVATE conditions (and mutexes) use more efficient syscalls.\n\nChange-Id: I9a281a4b88206e92ac559c66554e886b9c62db3a\n"
    },
    {
      "commit": "2f7540e78f2a0952ddbbd9b953e186b90f401734",
      "tree": "a507541a85465b755372d2e8e638dc0fe3a5bb92",
      "parents": [
        "f6331a497455fdb6618bf4c634c9326695304c24"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 11 15:06:54 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 11 15:06:54 2010 -0800"
      },
      "message": "implement connect/disconnect in our native_window_t implementations\n\nthe framebuffer implementation doesn\u0027t do anything special with this\nbut the surfaceflinger implementation makes sure the surface is not used\nby two APIs simultaneously.\n\nChange-Id: Id4ca8ef7093d68846abc2ac814327cc40a64b66b\n"
    },
    {
      "commit": "4119c543024b4ae647b22a2da1422f8848a6ef7a",
      "tree": "259188a8db6b8d22d286ea14dd8fd989de5ae91e",
      "parents": [
        "0e0b0c9e3d2c2edf8deff1f02b7856ad47db3ff9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 08 19:23:26 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 08 19:23:26 2010 -0800"
      },
      "message": "Fix a small bug where we could compute SharedBufferStack\u0027s tail incorrectly.\n\nAlso add \"tail\" to the debug dump().\n\nChange-Id: I04b1ea375dfc9ddcc22f0c6b6cd01300e507572e\n"
    },
    {
      "commit": "5d26c1e38dabb3ad8b4b6e1000375f3b1a6b7693",
      "tree": "6ba3c3a0a6a5de37d65c07690de84080a91db3b3",
      "parents": [
        "69f22feb8540576d2a2e9d32f9c86ebbbf309409"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 01 16:09:43 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 01 18:34:50 2010 -0800"
      },
      "message": "Added a name to Surface created by SurfaceFlinger\n\nUpdated the window manager to use this new facility.\nSurfaces name are now printed by \"dumpsys\".\n"
    },
    {
      "commit": "c86727f5805f28fbd25da141c50fb6843f364f3a",
      "tree": "395806614f40b9aac7306a9e951305167fb8abe1",
      "parents": [
        "08d13c3cbb0b250b84ca861edb462060556aead9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 11 17:30:52 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Feb 21 23:27:25 2010 -0800"
      },
      "message": "remove a dependency of GraphicBuffer (libui) on Parcel (libbinder).\n\nAdd a Flattenable interface to libutils which can be used to flatten\nan object into bytestream + filedescriptor stream.\nParcel is modified to handle Flattenable. And GraphicBuffer implements\nFlattenable.\n\nExcept for the overlay classes libui is now independent of libbinder.\n"
    },
    {
      "commit": "e59a54c0edc65f6092a62a137226ddf540361022",
      "tree": "65e95cec486c7b5b9ce7a02819d6ec4eca6eb7a1",
      "parents": [
        "41207b6eb0524c6a2fe9e85f6373785e2937e90f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 17 20:22:26 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 17 20:26:47 2010 -0800"
      },
      "message": "Remove a dependency of Region (libui) on Parcel (libbinder).\n"
    },
    {
      "commit": "000479f9e325b4e426a67033abd92d47da412725",
      "tree": "16b93ea777744aa24ffe7d3a191bb90529ad4ce5",
      "parents": [
        "28a5dc229ed25c771cde25668928edc788073029"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 09 17:46:37 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 11 13:16:22 2010 -0800"
      },
      "message": "split libsurfaceflinger_client and libcamera_client out of libui\n"
    }
  ]
}
