)]}'
{
  "log": [
    {
      "commit": "7dde599bf1a0dbef7390d91c2689d506371cdbd7",
      "tree": "6580e646734b6d4c64ab1a99dc2c710d4c8e0df1",
      "parents": [
        "1fd88a560df8f58c3a798b25f64795e8306e527f"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Fri May 22 09:51:44 2015 -0700"
      },
      "committer": {
        "name": "Rob Carr",
        "email": "racarr@google.com",
        "time": "Thu Oct 29 00:11:28 2015 +0000"
      },
      "message": "Support SurfaceView synchronization.\n\nAdd API for fetching the next frame number to be produced by\na given buffer producer. Add an API to SurfaceComposer to \ndefer execution of the current transaction until a given frame number. \nTogether these may be used to synchronize app drawing and surface \ncontrol updates.\n\nChange-Id: I8e0f4993332ac0199c768c88581a453fefbaff1d\n"
    },
    {
      "commit": "567dbbb6dd42be5013fcde0dadb3316d85f2fa0d",
      "tree": "5072cd29a7d0dc5be17f5a27f805c42c12ebcdbb",
      "parents": [
        "1ec0f48cbd44a56c360d075849655ab2c3f36476"
      ],
      "author": {
        "name": "Pablo Ceballos",
        "email": "pceballos@google.com",
        "time": "Wed Aug 26 18:59:08 2015 -0700"
      },
      "committer": {
        "name": "Pablo Ceballos",
        "email": "pceballos@google.com",
        "time": "Thu Sep 24 15:22:42 2015 -0700"
      },
      "message": "BQ: get rid of async in producer interface\n\n- Get rid of the async flag in dequeueBuffer, allocateBuffers,\n  waitForFreeSlotThenRelock, and QueueBufferInput.\n- Instead use the persistent flags mDequeueBufferCannotBlock and\n  mAsyncMode to determine whether to use the async behavior.\n\nBug 13174928\n\nChange-Id: Ie6f7b9e46ee3844ee77b102003c84dddf1bcafdd\n"
    },
    {
      "commit": "583b1b32191992d6ada58b3c61c71932a71c0c4b",
      "tree": "2c8daa3613d25df62529580ec167879b6b0cc5c5",
      "parents": [
        "643a34c3b4dcacf3303ec33b590ca9067e475169"
      ],
      "author": {
        "name": "Pablo Ceballos",
        "email": "pceballos@google.com",
        "time": "Thu Sep 03 18:23:52 2015 -0700"
      },
      "committer": {
        "name": "Pablo Ceballos",
        "email": "pceballos@google.com",
        "time": "Fri Sep 18 11:43:09 2015 -0700"
      },
      "message": "BQ: Prevent operations on disconnected BQs\n\n- Update unit tests to match\n\nBug 23763412\n\nChange-Id: I77e59bf6b57b328433c3835450455f80a8fa454b\n"
    },
    {
      "commit": "e5b755a045f4203fdd989047441259893c6fbe2d",
      "tree": "b9e9ce4e620bf129e599077b3cd12fa811dc5fa0",
      "parents": [
        "fa455354557f6283ff3a7d76979e52fd251c155f"
      ],
      "author": {
        "name": "Pablo Ceballos",
        "email": "pceballos@google.com",
        "time": "Thu Aug 13 16:18:19 2015 -0700"
      },
      "committer": {
        "name": "Pablo Ceballos",
        "email": "pceballos@google.com",
        "time": "Mon Aug 24 17:08:13 2015 -0700"
      },
      "message": "BQ: Get rid of setBufferCount\n\n- Remove setBufferCount from BufferQueueProducer and\n  IGraphicsBufferQueueProducer.\n- Get rid of the unit tests for it.\n- In Surface, convert setBufferCount calls into calls to\n  setMaxDequeuedBufferCount.\n- Change mOverrideMaxBufferCount to a boolean since it can now be\n  derived from mMaxAcquiredBufferCount, mMaxDequeuedBufferCount, and\n  mAsyncMode.\n\nBug 13174928\n\nChange-Id: Ia0adc737fae9e13f186df832b8428a0829041bf9\n"
    },
    {
      "commit": "fa455354557f6283ff3a7d76979e52fd251c155f",
      "tree": "cbbf1ea5523e7327cab144003a8723eef068ab65",
      "parents": [
        "8d8e33ac4161bd145db75275f8a5555021f2bac5"
      ],
      "author": {
        "name": "Pablo Ceballos",
        "email": "pceballos@google.com",
        "time": "Wed Aug 12 17:47:47 2015 -0700"
      },
      "committer": {
        "name": "Pablo Ceballos",
        "email": "pceballos@google.com",
        "time": "Mon Aug 24 17:07:42 2015 -0700"
      },
      "message": "BQ: add setMaxDequeuedBufferCount\n\nAdds the new setMaxDequeuedBufferCount() function to\nBufferQueueProducer. This will eventually replace setBufferCount.\n\nAlso add setAsyncMode.\n\nBug 13174928\n\nChange-Id: Iea1adcd5d74a75f67d8e9dde06d521695628ad5a\n"
    },
    {
      "commit": "c6f30bdee1f634eb90d68cb76efe935b6535a1e8",
      "tree": "2cff76d1f8c26db9b7a96995b833cd86ec468329",
      "parents": [
        "5b36ea44c58f8def561bf37c79d3452b21e2deab"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Mon Jun 08 09:32:50 2015 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Mon Jun 08 09:40:49 2015 -0700"
      },
      "message": "libgui/SurfaceFlinger: Add getConsumerName\n\nAdds a getConsumerName method to IGraphicBufferProducer and Surface.\nCurrently, the name is cached inside of IGBP and is update on connect\nand dequeueBuffer, which should be good enough for most uses.\n\nBug: 6667401\nChange-Id: I22c7881d778e495cf8276de7bbcd769e52429915\n"
    },
    {
      "commit": "812ed0644f8f8f71ca403f4e5793f0dbc1fcf9b2",
      "tree": "ceb7515f9f4ded20808bdb322eb9af77366d0629",
      "parents": [
        "a8c2454d52d3c23bd53b4a172eff8e5f4af30168"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Jun 02 15:45:22 2015 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Wed Jun 03 11:09:33 2015 -0700"
      },
      "message": "libgui: Add generation numbers to BufferQueue\n\nThis change allows producers to set a generation number on a\nBufferQueue. This number will be embedded in any new GraphicBuffers\ncreated in that BufferQueue, and attempts to attach buffers which have\na different generation number will fail.\n\nIt also plumbs the setGenerationNumber method through Surface, with the\nadditional effect that any buffers attached to the Surface after\nsetting a new generation number will automatically be updated with the\nnew number (as opposed to failing, as would happen on through IGBP).\n\nBug: 20923096\nChange-Id: I32bf726b035f99c3e5834beaf76afb9f01adcbc2\n"
    },
    {
      "commit": "9de7293b0a1b01ebe6fb1ab4a498f144adc8029f",
      "tree": "f8ee5b60b00fb545ea324e94fdb4b246b0943f16",
      "parents": [
        "0de7ea752900b5da29ad19c2799040235477f3c5"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Thu Apr 16 17:28:43 2015 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Thu Apr 23 15:28:12 2015 -0700"
      },
      "message": "libgui: Allow an IGBProducer to disable allocation\n\nAdds a new method IGBP::allowAllocation, which controls whether\ndequeueBuffer is permitted to allocate a new buffer. If allocation is\ndisallowed, dequeueBuffer will block or return an error as it\nnormally would (as controlled by *ControlledByApp).\n\nIf there are free buffers, but they are not of the correct dimensions,\nformat, or usage, they may be freed if a more suitable buffer is not\nfound first.\n\nBug: 19801715\nChange-Id: I0d604958b78b2fd775c2547690301423f9a52165\n"
    },
    {
      "commit": "3be1c6b60a188dc10025e2ce156c11fac050625d",
      "tree": "eab1b3c19861ba39808733d68a415ac3bf923949",
      "parents": [
        "b6b81d6acd6949a731308666ac211864f824ab50"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Nov 18 10:24:03 2014 -0800"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Wed Mar 18 15:57:27 2015 -0700"
      },
      "message": "libgui: Enable -Weverything and -Werror\n\nEnables -Weverything and -Werror, with just a few exceptions for\nwarnings we can\u0027t (or shouldn\u0027t need to) work around.\n\nCherry pick of I034abec27bf4020d84af60d7acc1939c59986dd6 plus a\ncouple of minor changes to CpuConsumer.cpp to make it work with a\nprior change:\n    Uncomment CC_LOGV on line 46\n    Change C-style cast to static_cast on line 71\n\nChange-Id: Iaec610477ea0122317b0578fb74caf2383d4cf08\n"
    },
    {
      "commit": "01049c8321aab30cd431e2febeddd79242ae5a4f",
      "tree": "7a78d2e8f6d67618779e2c7f16202b87dcec1a02",
      "parents": [
        "38803268570f90e97452cd9a30ac831661829091"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Nov 11 10:32:31 2014 -0800"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Dec 04 17:56:17 2014 -0800"
      },
      "message": "Enable clang for libui/libgui/surfaceflinger\n\nEnables clang and C++11 for libui/libgui/surfaceflinger, and\neliminates all compile-time warnings.\n\nChange-Id: Ie237fdb5ae44f2bfcddaa884f9c65ec3f08ae50f\n(cherry picked from commit f10c46ef855b6410b20ebd8b1351d4d78d8eca8e)\n"
    },
    {
      "commit": "89fd4f7fa6bd17ce5400979c3b9e5ba0bf7e919e",
      "tree": "10ccf0c26abfda1d6cc91fbca91cc0e41784d1aa",
      "parents": [
        "fecc0bf4f1d8d1939807123d0f01ca1fe377bda4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 13 14:18:56 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 13 14:18:56 2014 -0800"
      },
      "message": "Frameworks/native: Wall Werror in surfaceflinger\n\nTurn on -Wall -Werror in services/surfaceflinger. Fix warnings.\n\nChange-Id: Ifef830300d9d4bc657d8f1257c02bfe8c2b4d9c5\n"
    },
    {
      "commit": "47e45405d1533aa73307014f7bf371e118695cf3",
      "tree": "cabc47d4088308ed27b799d998a6d4a705e18058",
      "parents": [
        "1f6078aef71b1d3f080cd565adbec350c71088dd"
      ],
      "author": {
        "name": "Michael Lentine",
        "email": "mlentine@google.com",
        "time": "Fri Jul 18 15:34:25 2014 -0700"
      },
      "committer": {
        "name": "Michael Lentine",
        "email": "mlentine@google.com",
        "time": "Wed Jul 30 14:36:25 2014 -0700"
      },
      "message": "Allow for resizing of Virtual Displays.\n\nModify SurfaceFlinger to use VirtualDisplaySurface in all cases when a virtual\ndisplay is used. Add functionality in VirtualDisplaySurface to resize the\nbuffers aquired in the QueueBufferOutput. Add transaction support in\nSurfaceFlinger for resize. Add the modification of the size in DisplayDevice.\n\nChange-Id: Iae7e3556dc06fd18d470adbbd76f7255f6e6dd6b\nTested: None\n"
    },
    {
      "commit": "29a3e90879fd96404c971e7187cd0e05927bbce0",
      "tree": "024503f644be306ea3eb99e14b8847d454bdbf51",
      "parents": [
        "a317f27b7bf49e2e7b2b443223c07fb8c7c3ac3f"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Fri Jun 20 13:13:57 2014 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Fri Jun 20 13:13:57 2014 -0700"
      },
      "message": "BufferQueue: Add allocateBuffers method\n\nThis adds an allocateBuffers method to BufferQueue, which instructs\nit to allocate up to the maximum number of buffers allowed by the\ncurrent configuration. The goal is that this method can be called\nahead of render time, which will prevent dequeueBuffers from blocking\nin allocation and inducing jank.\n\nThis interface is also plumbed up to the native Surface (and, in\nanother change, up to the Java Surface and ThreadedRenderer).\n\nBug: 11792166\nChange-Id: I4aa96b4351ea1c95ed5db228ca3ef98303229c74\n"
    },
    {
      "commit": "fb39827ebce4637dcba03770f6644cf67e932e06",
      "tree": "711ceada076e0f0d8fb138ac8325f2ef8af52298",
      "parents": [
        "017a53851628e967e5e103a467acb602010dffdc",
        "febd4f4f462444bfcb3f0618d07ac77e3fc1f6ad"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Mon Apr 21 16:11:21 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 21 16:11:22 2014 +0000"
      },
      "message": "Merge \"BufferQueue: Increase max slots from 32 to 64\""
    },
    {
      "commit": "febd4f4f462444bfcb3f0618d07ac77e3fc1f6ad",
      "tree": "3e3a238271875631580590219deb426441071e70",
      "parents": [
        "10f91bbf7db6eb999de8f7041a8c7bb0cb809799"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Wed Apr 09 16:14:51 2014 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Fri Apr 18 11:40:14 2014 -0700"
      },
      "message": "BufferQueue: Increase max slots from 32 to 64\n\nIncreases NUM_BUFFER_SLOTS from 32 to 64 and changes the mask\nreturned by IGBC::getReleasedBuffers from 32 to 64 bits.\n\nBug: 13174352\nChange-Id: Ie8ef0853916cfb91f83881c7241886bb1950f01a\n"
    },
    {
      "commit": "d9822a3843017444364899afc3c23fb5be6b9cb9",
      "tree": "563f14d7526d30eebe5913d66ed150609c2796eb",
      "parents": [
        "7f605bd4c09e2b086e69751491e25e98f4a0eb98"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Fri Mar 28 15:25:31 2014 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Apr 15 10:27:25 2014 -0700"
      },
      "message": "BufferQueueProducer: add detachNextBuffer\n\nAdds a new method, IGBP::detachNextBuffer, that effectively does\ndequeue + request + detach in a single call, but does not need to\nknow anything about the dequeued buffer, and will not block on\ndequeue. This is mostly for the upcoming StreamSplitter to use in\nits onBufferReleased callback.\n\nChange-Id: Ie88a69de109003acebaa486a5b44c8a455726550\n"
    },
    {
      "commit": "f0eaf25e9247edf4d124bedaeb863f7abdf35a3e",
      "tree": "15baebb3fa387a1bba3625b3067aa28221cbc8ae",
      "parents": [
        "96668903e4d11893ea1f68525713542b0adb5404"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Fri Mar 21 13:05:51 2014 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Mon Mar 31 14:10:07 2014 -0700"
      },
      "message": "BufferQueue: Add producer buffer-released callback\n\nAdd a callback to the producer side, onBufferReleased, which will be\ncalled every time the consumer releases a buffer back to the\nBufferQueue. This will enable a buffer stream splitter to work\nautonomously without having to block on dequeueBuffer.\n\nThe binder object used for the callback replaces the generic IBinder\ntoken that was passed into IGraphicBufferProducer::connect to detect\nthe death of the producer. If a producer does not wish to listen for\nbuffer release events, it can pass in an instance of the\nDummyProducerListener class defined in IProducerListener.h, if it even\ncares about death events (BufferQueue doesn\u0027t enforce the token being\nnon-NULL, though perhaps we should).\n\nChange-Id: I23935760673524abeafea2b58dccc3583b368710\n"
    },
    {
      "commit": "b9b088375d33a87b201cdbe18be71802e2607717",
      "tree": "5ef12a29fbb1d3cb6e7d35919574bb5753c251d5",
      "parents": [
        "74d8acd7fcd5f245feb28618a003b1ac2f762a7e"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Thu Mar 13 11:55:57 2014 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Mar 18 10:08:44 2014 -0700"
      },
      "message": "Remove deprecated BufferQueue constructor\n\nBug: 13415624\nChange-Id: I9fe15e45daa7351f1db34ee75bfee6f19cb347d3\n"
    },
    {
      "commit": "73ed82f809a40560fd3a6d53d18e5c846362d764",
      "tree": "cbf5d50d6c3b7cd49b69c1d95b4f294f64cae8a7",
      "parents": [
        "a3f519fe6ffb6ac358a3a8015beb94ef1b596ae5",
        "399184a4cd728ea1421fb0bc1722274a29e38f4a"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Thu Mar 13 20:28:16 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 13 20:28:17 2014 +0000"
      },
      "message": "Merge \"Add sideband streams to BufferQueue and related classes\""
    },
    {
      "commit": "399184a4cd728ea1421fb0bc1722274a29e38f4a",
      "tree": "7185bc1ac84eec1afebc221ed91d90b90fa9a7fb",
      "parents": [
        "05fe2d1cfbf580c04ef1b1f0130b5dccba6dfe33"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Mar 03 15:42:54 2014 -0800"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Tue Mar 11 12:23:14 2014 -0700"
      },
      "message": "Add sideband streams to BufferQueue and related classes\n\nSideband streams are essentially a device-specific buffer queue that\nbypasses the BufferQueue system. They can be used for situations with\nhard real-time requirements like high-quality TV and video playback\nwith A/V sync. A handle to the stream is provided by the source HAL,\nand attached to a BufferQueue. The sink HAL can read buffers via the\nstream handle rather than acquiring individual buffers from the\nBufferQueue.\n\nChange-Id: Ib3f262eddfc520f4bbe3d9b91753ed7dd09d3a9b\n"
    },
    {
      "commit": "9f3053de78630815d60cf48a2cf2348cc5867c45",
      "tree": "e87e2a86d1ca837a80fc7730daece3f28a41e800",
      "parents": [
        "544b09523b791935ffe9aa64d1f20335f7e2dc78"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Thu Mar 06 15:14:33 2014 -0800"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Mon Mar 10 16:45:38 2014 -0700"
      },
      "message": "BufferQueue: Allow detaching/reattaching buffers\n\nAdds detachBuffer and attachBuffer calls to both the producer and\nconsumer sides of BufferQueue. Buffers may be detached while dequeued\nby the producer or acquired by the consumer, and when attached, enter\nthe dequeued and acquired states, respectively.\n\nBug: 13173343\nChange-Id: Ic152692b0a94d99e0135b9bfa62747dab2a54220\n"
    },
    {
      "commit": "7143316af216fa92c31a60d4407b707637382da1",
      "tree": "947490d7fc78fe0897dee344f972107fd3423166",
      "parents": [
        "1d41d5d82c0654313b33d45c7b8943eeba13469e"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Feb 04 16:22:36 2014 -0800"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Feb 04 16:46:54 2014 -0800"
      },
      "message": "Fix virtual display nesting\n\nThis fixes the cycling rendering loop caused by nesting virtual\ndisplays by preventing them from recomposing if their contents\nhaven\u0027t changed.\n\nBug: 12101046\nChange-Id: I600365c0fd5d3ad93e04295d26cf9de177ffc79b\n"
    },
    {
      "commit": "497ba0e08503806571b52ebe27cc7eee4c0e71a7",
      "tree": "0edeb7b6cce3fa669fb45be3ef3a1dd6febde936",
      "parents": [
        "40da5283ebc6b5cf1e3820740dc274c47cc55f6d"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Nov 04 16:43:03 2013 -0800"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Nov 04 16:43:03 2013 -0800"
      },
      "message": "Don\u0027t use implementation-defined format with CPU consumers\n\nIf the virtual display surface is being consumed by the CPU, it can\u0027t\nbe allowed with HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED since there is\nno way for the CPU consumer to find out what format gralloc chose. So\nfor CPU-consumer surfaces, just use the BufferQueue\u0027s default format,\nwhich can be set by the consumer.\n\nA better but more invasive change would be to let the consumer require\na certain format (or set of formats?), and disallow the producer from\nrequesting a different format.\n\nBug: 11479817\nChange-Id: I5b20ee6ac1146550e8799b806e14661d279670c0\n"
    },
    {
      "commit": "1e27ba234c5bfd4f6535ee221a6c20407a50f868",
      "tree": "3edb31d034068841b0fb6541bb36f4d4b53fe24f",
      "parents": [
        "dacd4159631865da1a02203fe5fa7c5f1339cda9"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Fri Sep 27 09:05:09 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Thu Oct 17 11:20:22 2013 -0700"
      },
      "message": "Use implementation-defined format when HWC writes to output buffer\n\nWhen GLES isn\u0027t writing to the output buffer directly, request an\nimplementation-defined format with minimal usage flags, leaving the\nformat choice up to gralloc. On some hardware this allows HWC to do\nformat conversions during composition that would otherwise need to be\ndone (with worse power and/or performance) by the consumer.\n\nBug: 8316155\nChange-Id: Iee6ee8404282036f9fd1833067cfe11dbadbf0bf\n"
    },
    {
      "commit": "365857df8b94c959dea984a63013f6e7730ef976",
      "tree": "590b438850cd61591db5f017e6e164139db6bc3d",
      "parents": [
        "90ed3e8d7883d9c80fb8bf11b1c593bd8b2b39d0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 11 19:35:45 2013 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 16 16:15:21 2013 -0700"
      },
      "message": "Make sure do disconnect from a BQ when its client dies.\n\nBug: 5679534\n\nChange-Id: If447e8673df83fe0b1d6210641e0a48522501a53\n"
    },
    {
      "commit": "8db92553e9e6263cd41eaf1a1ebc9e3f88f92b5f",
      "tree": "638613f449621b2fffb5b1d51ec68c9596d59086",
      "parents": [
        "f2e4fcd96c11861bd0af1a9525344c1b691c9de9"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Thu Aug 29 16:03:50 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Thu Aug 29 16:09:11 2013 -0700"
      },
      "message": "Force async behavior for the virtual display output BufferQueue\n\nBug: 10551087\nChange-Id: I40bbb2b87d64420939a0ea309254f281437dab56\n"
    },
    {
      "commit": "028dc8f2d72bc7cd4fbe7808781443125a742f78",
      "tree": "b0e255599a9034e1981971dd13ec03b49c9a30a0",
      "parents": [
        "353ddc6e77816352107537c215dc8302f6e8587a"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Tue Aug 20 16:35:32 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Tue Aug 20 16:35:32 2013 -0700"
      },
      "message": "Provide HWC prepare with a valid output buffer\n\nWe weren\u0027t dequeing and setting the output buffer until just before\nset(). This didn\u0027t allow HWC to make decisions in prepare() based on\nthe output buffer format, dimensions, etc.\n\nNow we dequeue the output buffer at the beginning of the composition\nloop and provide it to HWC in prepare. In GLES-only rendering, we may\nhave to cancel the buffer and acquire a new one if GLES requests a\nbuffer with properties different than the one we already dequeued.\n\nBug: 10365313\nChange-Id: I96b4b0a851920e4334ef05080d58097d46467ab8\n"
    },
    {
      "commit": "db89edc94bd2a78226b407f9f7261e202e7fa325",
      "tree": "007ffcc43a42459a5a089d3be8c51f81d40dd096",
      "parents": [
        "687821c05b5a85db1b172e7599861c803d268a8d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Aug 02 01:40:18 2013 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 06 20:05:36 2013 +0000"
      },
      "message": "All consumers now take an IGraphicBufferConsumer instead of a BufferQueue\n\nthis means they only have access to the consumer end of\nthe interface. we had a lot of code that assumed consumers\nwhere holding a BufferQueue (i.e.: both ends), so most of\nthis change is untangling in fix that\n\nBug: 9265647\nChange-Id: Ic2e2596ee14c7535f51bf26d9a897a0fc036d22c\n"
    },
    {
      "commit": "7cdd786fa80cf03551291ae8feca7b77583be1c5",
      "tree": "b3d03af7ad939e89db944c648fdb18ee349b86a8",
      "parents": [
        "a3fbda3cef04d51a35a3eb64b2f744a989800856"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jul 18 22:10:56 2013 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jul 19 17:38:01 2013 -0700"
      },
      "message": "Make ANW.setSwapInterval(0) work again\n\nwe can now queue/dequeue a buffer in asynchrnous mode by using the\nasync parameter to these calls. async mode is only specified\nwith those calls (it is not modal anymore).\n\nas a consequence it can only be specified when the buffer count\nis not overidden, as error is returned otherwise.\n\nChange-Id: Ic63f4f96f671cb9d65c4cecbcc192615e09a8b6b\n"
    },
    {
      "commit": "595264f1af12e25dce57d7c5b1d52ed86ac0d0c9",
      "tree": "204b340f3781aa95671fb08f47e53f51b125f57e",
      "parents": [
        "1962f6513732682645f74561c0665e168196056e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jul 16 22:56:09 2013 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jul 18 22:28:18 2013 -0700"
      },
      "message": "BufferQueue improvements and APIs changes\n\nthis is the first step of a series of improvements to\nBufferQueue. A few things happen in this change:\n\n- setSynchronousMode() goes away as well as the SynchronousModeAllowed flag\n- BufferQueue now defaults to (what used to be) synchronous mode\n- a new \"controlled by app\" flag is passed when creating consumers and producers\n  those flags are used to put the BufferQueue in a mode where it\n  will never block if both flags are set. This is achieved by:\n  - returning an error from dequeueBuffer() if it would block\n  - making sure a buffer is always available by replacing\n    the previous buffer with the new one in queueBuffer()\n    (note: this is similar to what asynchrnous mode used to be)\n\nNote: in this change EGL\u0027s swap-interval 0 is broken; this will be\nfixed in another change.\n\nChange-Id: I691f9507d6e2e158287e3039f2a79a4d4434211d\n"
    },
    {
      "commit": "38efe86d9459cf5c96a24a34cc5cbf31fdba7e19",
      "tree": "9fc8074b1c3fd31515d0396df9e7f917380529cb",
      "parents": [
        "5cd46aa3399ddeaf12a211390dfde66c796ab299"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Sat Apr 06 23:12:29 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Jul 15 13:59:41 2013 -0700"
      },
      "message": "Rewrite VirtualDisplaySurface\n\nThe previous implementation assumed that the HWC could read and write\nthe same buffer on frames that involved both GLES and HWC composition.\nIt turns out some hardware can\u0027t do this. The new implementation\nmaintains a scratch buffer pool to use on these mixed frames, but on\nGLES-only or HWC-only frames still does composition directly into the\noutput buffer.\n\nBug: 8384764\nChange-Id: I7a3addb34fad9bfcbdabbb8b635083e10223df69\n"
    },
    {
      "commit": "e737c11cd83a449d9a544c5c6d4e0dfd42250a56",
      "tree": "9cf9f13fc26b0cabf6e95995e68db2ac99dd20dd",
      "parents": [
        "223b953cf748d8197cba26545172db9dcaeea2b4"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Tue May 07 11:58:47 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Tue May 07 11:58:47 2013 -0700"
      },
      "message": "Remove experimental HWC virtual display support\n\nBug: 8384764\nChange-Id: I97b52ed83ad85466bd91cb9291308994048568a1\n"
    },
    {
      "commit": "ffe1f19ca9707f84cb9fdb06209bf36cd8c2ef0a",
      "tree": "e96e4d9d19a81ec6ee46052e54f3b2fda16465f3",
      "parents": [
        "48bc05b56df9919fc39c5f2e3ea6535560eec98f"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Fri Mar 22 15:13:48 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Fri Mar 22 15:27:58 2013 -0700"
      },
      "message": "Fix virtual displays for HWC\u003c\u003d1.1\n\nIf we\u0027re using a HWC that doesn\u0027t support virtual displays, or we have\nmore virtual displays than HWC supports concurrently, the\nVirtualDisplaySurface should simply be a passthrough from source\n(GLES) to sink.\n\nThis change also tries to distinguish between display types and HWC\ndisplay IDs a little better, though there\u0027s more to do here. Probably\nneeds a higher-level rethink; it\u0027s too error-prone now.\n\nBug: 8446838\nChange-Id: I708d2cf262ec30177042304f174ca5b8da701df1\n"
    },
    {
      "commit": "851cfe834295224cd64bdd499872b95b19c4de8c",
      "tree": "be3c3711c47337d41401385e56f6d3aafb427d27",
      "parents": [
        "afaf14b9fbfe8943d845e2f01e8a401ad7a4d854"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Wed Mar 20 13:44:00 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Fri Mar 22 15:27:57 2013 -0700"
      },
      "message": "Isolate knowledge that fb target \u003d\u003d output buffer\n\nHWComposer didn\u0027t allow the virtual display output buffer to be set\ndirectly, instead it always used the framebuffer target buffer.\nDisplayDevice was only providing the framebuffer release fence to\nDisplaySurfaces after a commit.\n\nThis change fixes both of these, so both HWComposer and DisplayDevice\nshould continue to work if VirtualDisplaySurface changes to use\nseparate framebuffer and output buffers. It\u0027s also more correct since\nVirtualDisplaySurface uses the correct release fence when queueing the\nbuffer to the sink.\n\nBug: 8384764\nChange-Id: I95c71e8d4f67705e23f122259ec8dd5dbce70dcf\n"
    },
    {
      "commit": "13f01cbdbd34779a234bc674df79e23672fd5c0b",
      "tree": "9b1c9334f276ff039a2621fe0e639ff06249473c",
      "parents": [
        "8d8c75976171d194ca8f94727b22e3bf7676b9dd"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Wed Mar 20 11:37:21 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Fri Mar 22 09:56:58 2013 -0700"
      },
      "message": "Pass sp\u003cFence\u003es around instead of file descriptors\n\nChange-Id: Iac70584a2207940730e8f803a543e4e9a4000c47\n"
    },
    {
      "commit": "7414965606f82ac2bcace5d3e2c8a4810517bf1e",
      "tree": "1ca5e0fd04307bf98b30d41abd9f69d17fdfe702",
      "parents": [
        "fae23b8757a6e1b70997db28a2eaf34f9ddc9b84"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Tue Mar 19 17:18:09 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Wed Mar 20 11:16:55 2013 -0700"
      },
      "message": "Release virtual display buffer immediately after HWC set\n\nPreviously we only queued a virtual display buffer to the sink when\nthe next frame was about to be displayed. This may delay the \"last\"\nframe of an animation indefinitely. Now we queue the buffer as soon as\nHWC set() returns and gives us the release fence.\n\nBug: 8384764\nChange-Id: I3844a188e0f6ef6ff28f3e11477cfa063a924b1a\n"
    },
    {
      "commit": "80e0a397a4712666661ecc629a64ec26e7f6aac3",
      "tree": "f0171cbaeff47237eeab83e2095b76818f04caca",
      "parents": [
        "99c7dbb24994df2f3e175f7b25dd2c9dd92a72f0"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Fri Mar 15 12:32:10 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Mar 18 14:21:45 2013 -0700"
      },
      "message": "Add BufferQueueInterposer and use it for virtual displays\n\nBufferQueueInterposer allows a client to tap into a\nIGraphicBufferProducer-based buffer queue, and modify buffers as they\npass from producer to consumer. VirtualDisplaySurface uses this to\nlayer HWC composition on top of GLES composition before passing the\nbuffer to the virtual display consumer.\n\nBug: 8384764\nChange-Id: I61ae54f3d90de6a35f4f02bb5e64e7cc88e1cb83\n"
    },
    {
      "commit": "99c7dbb24994df2f3e175f7b25dd2c9dd92a72f0",
      "tree": "d49c7660b0e8de474c00f9b842830c3770af95ba",
      "parents": [
        "4c00cc11141da7d159eb2323b186ed344115c0f1"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Thu Mar 14 14:29:29 2013 -0700"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Mar 18 14:21:16 2013 -0700"
      },
      "message": "Add DisplaySurface abstraction\n\nDisplayDevice now has a DisplaySurface instead of using\nFramebufferSurface directly. FramebufferSurface implements\nDisplaySurface, and so does the new VirtualDisplaySurface class.\nDisplayDevice now always has a surface, not just for virtual displays.\n\nIn this change VirtualDisplaySurface is just a stub; buffers still go\ndirectly from GLES to the final consumer.\n\nBug: 8384764\nChange-Id: I57cb668edbc6c37bfebda90b9222d435bf589f37\n"
    }
  ]
}
