)]}'
{
  "log": [
    {
      "commit": "407ec78b828173257b0c5dae221649a4ccd8b058",
      "tree": "3890ba718151c345ce5c87a8d252e0445d790dc3",
      "parents": [
        "631582f7f7a3c879a5fba81f2bc082e4826758aa"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 24 17:06:58 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 24 17:06:58 2011 -0700"
      },
      "message": "Add OpenGL backend to ImageWallpaper\nBug #5204874\n\nCurrently disabled.\n\nChange-Id: I5e7b35dce2981b0691f107e39c6394b260466543\n"
    },
    {
      "commit": "3ab88557947d708cc36d60ce6566509ceff944e4",
      "tree": "9d5b772a77965900b776c1bd1c3d398a67f7e393",
      "parents": [
        "34e1fb1ee229a7e033dcd42f4efd194e1614d5ce"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Aug 01 20:24:02 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Aug 01 20:24:02 2011 -0700"
      },
      "message": "fix an issue where the screen could be stale after a surface size change\n\nsome GLES drivers dequeue buffers before a frame is started\n(which is allowed), which can cause a that frame to be rendered\ninto a buffer of the wrong size. Such buffer will be ignored\nby the compositor. If the application draws only once after a\nsize change, the screen might stay in this stale state.\n\nthis can be avoided by telling the GL driver to purge all its\npending buffers, which is done by making the surface not current\nand then current again.\n\nthis solution is specific to android, but acceptable because\nhandled solely in the framework.\n\nBug: 2263168\nChange-Id: I3d3c9a019979a9186e329d3160fa54adac78d3f7\n"
    },
    {
      "commit": "43dd61e08a726fbc3695b1cbfdef6bdd4ddd34be",
      "tree": "33f580f9ca4110cab54c799aad80e945210aeb67",
      "parents": [
        "e544a1dbc9a3a4277ef26f6c7a066e7b443829ec"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jul 12 14:11:07 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jul 12 14:11:07 2011 -0700"
      },
      "message": "fix typo in a comment\n\nChange-Id: If913611a65e8b578021e9f9a9546f05e0ce6ef44\n"
    },
    {
      "commit": "e5e0c50f7dfaccc220725c5595080e921ffda1e4",
      "tree": "ad37fc360554e81d9dddc6eb47c52e664f7ed25a",
      "parents": [
        "f71e5469441286c6f466043e64a7f6492557cbd9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Jun 15 15:18:31 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Jun 15 16:14:26 2011 -0700"
      },
      "message": "Properly refcount SurfaceTexture in the JNI layer.\n\nChange-Id: I4b4c8020c13b8d6ce0d302fe42410033bf5785a6\n"
    },
    {
      "commit": "8f0095cd33558e9cc8a440047908e53b68906f5f",
      "tree": "2f55d779bf102e0c134357d89c7de69d0444634a",
      "parents": [
        "3a5c227279011f850036c29e7c0bc96023298d5c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 02 17:24:22 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 02 18:32:29 2011 -0700"
      },
      "message": "Allows to render with an OpenGL context inside a TextureView.\n\nChange-Id: I59453f7fc3997f0502a1c5d325d37fed376fabc7\n"
    },
    {
      "commit": "7c80244afb9098c75b127c2d785bb6e5b03d68c5",
      "tree": "4eaf56c31d818142fa75d2c82ee1d4663f67fd08",
      "parents": [
        "b86a6ea41dadae6ee1915cdb9406c51193e97555"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Apr 21 15:46:27 2011 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Apr 21 15:46:27 2011 -0700"
      },
      "message": "Fix typo in Matrix.mPerspective.\n\n(Introduced by a copy-and-paste mistake when factoring out a common\nexpression. D\u0027Oh!)\n\nChange-Id: I5e97dde2d2f4564fc74ba69bfa4a2f9db44c8873\n"
    },
    {
      "commit": "d793299e875a97dc73e04e3beb2a2865563dccdb",
      "tree": "e8cdc375a5debec366cb3a6138226c1ab5ed4fe3",
      "parents": [
        "bf96c356c02c430153c281fb81dc1a00f7ad0b43"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Apr 21 14:52:37 2011 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Apr 21 14:52:37 2011 -0700"
      },
      "message": "Add utility method Matrix.perspectiveM\n\nChange-Id: Ic9d5e5d967bbc08acc524c5092ce61a1cdbfd360\n"
    },
    {
      "commit": "24ce5fb2cc09d0a14406e7b935f8648c5720d27e",
      "tree": "022bd63502ea1a649ecf32bdb3dc2e0205376901",
      "parents": [
        "7797e647fc8fcd5091b9449c0044f5cb70db5b47"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 08 20:01:01 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 11 15:31:20 2011 -0700"
      },
      "message": "Kill the global references in the OpenGL wrappers.\n\nJust use jniThrowException instead. Note that it would be trivial to throw\nseemingly more appropriate exceptions (NullPointerException and\nOutOfMemoryException in particular), but I\u0027m only attempting to preserve\nexisting behavior here.\n\nI also found shadowing bugs in some of the special-case functions, which\nwould previously always have leaked memory.\n\nThis also moves an accidental change to a generated file (ActivityThread -\u003e\nAppGlobals) into the generator, so it won\u0027t be overwritten in future.\n\nChange-Id: Iab570310b568cb406c60dd0e2b8211f8a36ae590\n"
    },
    {
      "commit": "9b7146db6d9c0586b98b062fbcdb3fac6cc54d19",
      "tree": "bb07142137a690e7fe705608da0d779ea942809e",
      "parents": [
        "0aaa11ed5be45170fb2535a6ce021c92b18d8878"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 07 18:05:04 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 07 18:05:04 2011 -0800"
      },
      "message": "Fix EGL JNI bugs\nBug #3461349\n\nBefore this change, eglGetCurrent*() could not be used to compare\ncontexts, displays and surfaces at the Dalvik level.\n\nChange-Id: I442037dae37bc357b64810ab10c779b5754e9153\n"
    },
    {
      "commit": "70a1875635cf988b9962fbe2325ea73fd346858c",
      "tree": "e2587fed775427e2a896a3a7a623a51cced7f8b7",
      "parents": [
        "e44e28fa116549608cfde064d8951dbc3f8e1fd3"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Feb 07 11:36:47 2011 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Feb 07 11:36:47 2011 -0800"
      },
      "message": "Extend recycled bitmap check to all GLUtils APIs.\n\nChange-Id: I9ea0022b167af2153190b6642aa303232e257379\n"
    },
    {
      "commit": "5f89f510f327228d4ba2261aff7e8faa7d3715aa",
      "tree": "8f94af6ab17533e3c424b6ed1188190a93c17843",
      "parents": [
        "944170f2cf3456a9885e998516120f053e2496d1"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Feb 02 21:16:53 2011 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Feb 02 21:16:53 2011 -0800"
      },
      "message": "Throw an exception when trying to upload a recycled bitmap.\n\nPreviously we would upload garbage.\n\nChange-Id: Id785792a16f9d24685687f4e6b64ec893ccad225\n"
    },
    {
      "commit": "29406daf21c2dfa4d893b421d39137eb47fb3aa6",
      "tree": "e76a3d4f66aec93b0f17ecf7ddfcda02552da114",
      "parents": [
        "e8e0ebbfd09214020cfbbaafaeb940a2e52985b3"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jan 27 14:46:52 2011 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jan 27 14:46:52 2011 -0800"
      },
      "message": "Add GL11ExtensionPack support to GLDebugWrapper\n\nAllows calling GL11ExtensionPack APIs in a GL context that has been\nwrapped for debugging.\n\nChange-Id: Ib0695b51a92f5dcce32db8b0dc7ee948e5059e7f\n"
    },
    {
      "commit": "75f2bc04df11c67d7074186432278f182381b9f2",
      "tree": "58f2f597517fc95e93ea1030987feca5ebf0a0eb",
      "parents": [
        "1418de7eff012c37cf34328eb368a547d70a1441"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jan 18 15:53:25 2011 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jan 18 15:53:25 2011 -0800"
      },
      "message": "Unhide GLSurfaceView.get/setPreserveEGLContextOnPause\n\nChange-Id: I882b8fa7888e2baae41c81b75af7fc1f639d38d6\n"
    },
    {
      "commit": "8432b3f98a22d5cdfcc0183d134770597e44d412",
      "tree": "cdf97b000439df11704863aa4ffbd7d79473fd8c",
      "parents": [
        "9aba2324ac8d7216732b42346bfcaf0be71eb22e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jan 14 11:45:17 2011 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jan 14 11:45:17 2011 -0800"
      },
      "message": "Add support for preserving EGL contexts when pausing / resuming.\n\nHidden for now.\n\nChange-Id: I350576c11960a1aa232da7aebc5c6ec60ff796b5\n"
    },
    {
      "commit": "c086ca1fa7cebc3e9a51abd4be4688346225c2e4",
      "tree": "e9b897e3cb60179cf642262c1d0de9b21bb41e74",
      "parents": [
        "11a8af5ea1e5a760e6d40f025f9cbc356edf1894"
      ],
      "author": {
        "name": "Dan Bornstein",
        "email": "danfuzz@android.com",
        "time": "Tue Dec 07 15:35:20 2010 -0800"
      },
      "committer": {
        "name": "Dan Bornstein",
        "email": "danfuzz@android.com",
        "time": "Tue Dec 07 15:35:20 2010 -0800"
      },
      "message": "These files had an older header.\n\nThis patch replaces the file headers with the approved Android\nheader text.\n\nChange-Id: I63cbd21e9112dab404158fb65f74bc6ca5b07eac\n"
    },
    {
      "commit": "1396afb73047c402db5af98e8f6b442ecbfa98d4",
      "tree": "f4e718f0577f7b1a7f41e6b37100cc8e78401ced",
      "parents": [
        "0424d69d484dfc25c73f6557199cfbb7aaaeb043"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Oct 27 11:37:23 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Oct 27 11:37:23 2010 -0700"
      },
      "message": "Preserve the render mode when recreating the render thread.\n\nChange-Id: I67a12a9598d3ef099bef8727411891614b1bc3f7\n"
    },
    {
      "commit": "2ff6a824619ac6849ba9f36d97590acf74f62518",
      "tree": "c08fc1534f9639cab6f03d786613e14b742d3dc1",
      "parents": [
        "9440083be22ec13e252aa347e654911d33e50086"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 26 18:19:14 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 26 18:19:14 2010 -0700"
      },
      "message": "Allow a GLSurfaceView to be reattached to a window.\n\nThis approach is more backwards-compatible than the previous attempt.\n\nThe onDetachedFromWindow case is unchanged from the \"classic\"\nGLSurfaceView behavior, except that we don\u0027t throw a NPE if the\nrenderer has never been set.\n\nChange-Id: Ia8103a73366ddb13be44f16b789c929e75ddc792\n"
    },
    {
      "commit": "fc5508bc994174bc4d1b1d028cfa25eb70ea8203",
      "tree": "6a43ba3a1e8f2bb887a80d4d24290af83a9fea4a",
      "parents": [
        "fc6d54ea074aa1f6a177b031e6b2814368ac7583"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Oct 25 19:38:13 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Oct 25 19:38:13 2010 -0700"
      },
      "message": "Do not exit the GLSurfaceView thread when detached from a window.\n\nAllows a GLSurfaceView to be removed from a window and later reattached\nto a window.\n\nChange-Id: I2b44f35d0c95404b13912782df8877953609a5d0\n"
    },
    {
      "commit": "f45b674d48ff91972e4b8ffbbe3c4bd16d231bdc",
      "tree": "13e4db70c53c2f220e9d4b8eb53c2568b6948415",
      "parents": [
        "c14f9ca6e5e795b641e7809786b4e51e13493907"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Aug 25 16:42:24 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Aug 25 16:57:02 2010 -0700"
      },
      "message": "reserve android.opengl.GLWallpaperService name for future use\n\nChange-Id: I7a217593a1ca39214dda26ddb3af3ddc30a8a95a\n"
    },
    {
      "commit": "1b4ecc63c4eceb7c125d4e749fd5f747d99d6ec6",
      "tree": "19f69c9eabca7460fb55801da2b106c6d8036f7d",
      "parents": [
        "70c6c9a1e2240e82d8eb442b34efa9629ef2bba4"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jul 13 19:09:37 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jul 13 19:09:37 2010 -0700"
      },
      "message": "Fix deadlock when switching between two GLSurfaceViews\n\nSome devices only support a single active EGL context.\n\nOn those devices, when a second activity that uses a GLSurfaceView\nis started in the same process, the second activity can potentially\nhang in GLSurfaceView.onWindowResize waiting for its GLSurfaceView\nrender thread to draw a frame. The second activity\u0027s render thread\nis waiting to acquire an EGL context, but the first activity\u0027s render\nthread doesn\u0027t know it should release the EGL context.\n\nThe fix is to detect the potential hang, and ask the first activity\u0027s\nrender thread to release the EGL context.\n\nChange-Id: Ibb342c68772297744c973bcf5010581cd132db67\n"
    },
    {
      "commit": "01e4cfc47d0a2c7e7ab383d2fb23224ec52c0301",
      "tree": "1ea8a7e26b691d9d2150e9ddbd19b04be9b8d5d3",
      "parents": [
        "7b5b27ada12d3680dec20274fa655fd7f73f839e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 24 15:07:24 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 24 15:20:48 2010 -0700"
      },
      "message": "Some ActivityThread/ActivityManager cleanup.\n\n- Move PackageInfo out of ActivityThread, renaming to LoadedApk.\n- Rename some of the other PacakgeInfo inner classes to better\n  represent what they are.\n- Rename HistoryRecord to ActivityRecord.\n- Introduce AppGlobals, to eventually let ActivityThread become\n  package scoped.\n\nChange-Id: Ib714c54ceb3cdbb525dce3db9505f31042e88cf0\n"
    },
    {
      "commit": "224107a421e2611b15d1ec736df54bca9ee3e78d",
      "tree": "7947fa03cc7f65a001a6b899d20f9a848a80e6a6",
      "parents": [
        "07ccf5ad7edfeeebb79208ad3e8a52917fe038a8"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jun 22 20:08:40 2010 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jun 22 20:08:40 2010 +0800"
      },
      "message": "Add OpenGL ES 2.0 VBO versions glDrawElements and glVertexAttribPointer.\n\nChange-Id: Id0069535e97fe96eef74e4d0c1d19b010061fe3b\n"
    },
    {
      "commit": "d6ddcb7f00a7af95b452233d965b922632f78f21",
      "tree": "ff19248cbc31678bf855594efb47754dfe25dd6e",
      "parents": [
        "2e948ca1a06470a1c4c581022eabaed593c58e27"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 24 19:00:08 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 24 19:07:08 2010 -0700"
      },
      "message": "fix [2677468] some 3rd party GL ES apps get a 32-bits surface by default and fail\n\nforce all SurfaceView to 565\n\nChange-Id: I8ebfa1239d8e4fa097c2e544677fb92fa20b39bd\n"
    },
    {
      "commit": "0e4aa37872810e46775374596e0beb11f7123727",
      "tree": "2912acd68ef1814444c3d8dbf2d2daef2b016a27",
      "parents": [
        "7171ea8179e09270e4d6ab825a2320816eee39c5"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Apr 19 22:32:15 2010 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Apr 19 22:32:15 2010 +0800"
      },
      "message": "Quietly handle EGL_BAD_NATIVE_WINDOW errors\n\nWe believe these errors happen when the window\nmanager has told surface flinger to close the\nnative window.\n\nIf this error happens while we are creating the\nEGL surface we exit the render loop (and\ntherefore exit the render thread.)\n\nIf the error happens while swapping the surface\nwe ignore it.\n\nIn either situation, we expect that the\napplication is about to be shut down by the\nwindow manager, so it should not be necessary\nto try and recover from the error."
    },
    {
      "commit": "4a65900cd69b79e6e47d275575eaeb5bb2487f9f",
      "tree": "e696fe3e7928376df0a15b465ed464f34ce9179b",
      "parents": [
        "7205b0fcb43e9309e2516420d235a1df0b3cd04a"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Mar 27 15:02:59 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Mar 27 15:02:59 2010 -0700"
      },
      "message": "Turn off logging."
    },
    {
      "commit": "451a224c46c297bd6b25e3570b45f5053b4788be",
      "tree": "a1a96809fd3139fe1fe8726cd5d44bc674a26607",
      "parents": [
        "57c6a46bd0c84c4b349d49f8df12f30a8cfcdaa2"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Mar 25 17:18:39 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Mar 25 17:18:39 2010 -0700"
      },
      "message": "GLSurfaceView pause and resume now synchronize\nwith the GLThread.\n\nWe used to just set the mPaused state and return,\nnow we wait until the rendering thread signals\nthat it has noticed the change in pause state.\n\nThis makes Pause/Resume more consistent with\nother UI-thread-to-GLThread event communication.\n\nThis change was made in the hope of fixing some\nrace conditions observed in monkey testing.\n"
    },
    {
      "commit": "57c6a46bd0c84c4b349d49f8df12f30a8cfcdaa2",
      "tree": "b585320507e09bb348908082c3d670b633dba8c3",
      "parents": [
        "e6c9448eb3228887c49f6ba9c4be2345443286e9"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Mar 25 11:53:27 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Mar 25 11:53:27 2010 -0700"
      },
      "message": "Turn off thread logging (too many messages.)\n\nLeave some other logging on for the monkey test."
    },
    {
      "commit": "e6c9448eb3228887c49f6ba9c4be2345443286e9",
      "tree": "12dd6c8a8ddd021e6ae4b671c1f485e8323deb28",
      "parents": [
        "5202eaaa5f5e898c84f33d8c8023a427ca01d517"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Mar 25 10:50:21 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Mar 25 10:50:21 2010 -0700"
      },
      "message": "Add logging of GLSurfaceView pause/resume calls.\n\nTurn on GLSurfaceView logging, so we can get better\ninformation in the monkey tests.\n\nChange-Id: Ifec0101f8a00ab09037dc9f7a1496fa1a374cc08\n"
    },
    {
      "commit": "b1768998f14e03bd69cf049783d6cbeccf6d5839",
      "tree": "6a627c625a32bd2ef73abe417ee1ef8d35fe8971",
      "parents": [
        "07353a1e8598b1e2993b8b6763f630379ae6e8bb"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Mar 24 13:46:15 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Mar 24 13:48:27 2010 -0700"
      },
      "message": "Improve our EGL management when pausing / resuming.\n\nWe now release the EGL context when pausing. This\nis required to reduce the chance of running out of\ncontexts on devices which support a limited number\nof active EGL contexts.\n\nSomeday we may implement a global EGL context\nmanager that will allow us to let EGL contexts\npersist until another activity needs an EGL\ncontext. But for now, without such a manager,\nwe take the conservative approach.\n\nSeparately, we now terminate EGL when\npausing on Sapphire. This is a requirement of the\nSapphire OpenGL driver."
    },
    {
      "commit": "07353a1e8598b1e2993b8b6763f630379ae6e8bb",
      "tree": "b28a43f0e7aeb89d0925fd715df5875f13cb2b44",
      "parents": [
        "0ee0a2ea57197cb2f03905454098d9a7a309f77b"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Mar 23 15:22:03 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Mar 23 17:57:41 2010 -0700"
      },
      "message": "GLSurfaceView: Log egl failures\n\nDecode the EGL error code when throwing exceptions."
    },
    {
      "commit": "04b17ab7b4a17a28f541f746c3d55046c5b87596",
      "tree": "3658ec6ee67336e7be5e98de5e76fb4365d7fcd4",
      "parents": [
        "7d740861415523feb239d94d805fa985835663c0"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Mar 15 15:09:30 2010 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Mar 15 16:30:47 2010 -0700"
      },
      "message": "Improve eglSwapBuffers error handling.\n\nWe now distinguish EGL_CONTEXT_LOST errors from\nother kinds of errors. We return \"true\" if\nthe swap completes successfully, \"false\" if\nthe swap fails due to EGL_CONTEXT_LOST, and\nthrow a RuntimeException if the swap fails due\nto any other cause.\n\nIf eglSwapBuffers succeeds, we now avoid calling\neglGetError at all, which means we avoid clearing\nany EGL errors that might already have been\npending before eglSwapBuffers is called.\n"
    },
    {
      "commit": "15a4d2ffd04dc6c70f2cd17dae12ac6bc14c69ab",
      "tree": "2dbbf0c31082373354fb17308de3681e22c66169",
      "parents": [
        "8abb26ee6c77e01a23d26c305a65b25a33710024"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 11 18:20:12 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 11 18:22:10 2010 -0800"
      },
      "message": "Add correct copyright headers to multiple files\n\nFormat for the list of changes shows the origin commit reference followed\nby the file name.\n\n33931-p9 awt/org/apache/harmony/awt/gl/font/AndroidGlyphVector.java\n33931-p9 awt/org/apache/harmony/awt/gl/image/PngDecoderJava.java\n133776-p9 core/java/android/app/IntentService.java\n127013-p9 core/java/android/appwidget/AppWidgetHost.java\n27863-p9 core/java/android/bluetooth/BluetoothAudioGateway.java\n60765-p9 core/java/android/content/SyncResult.java\n43920-p9 core/java/android/content/pm/ActivityInfo.java\n43920-p9 core/java/android/content/pm/ApplicationInfo.java\n43920-p9 core/java/android/content/pm/InstrumentationInfo.java\n43920-p9 core/java/android/content/pm/PackageInfo.java\n44103-p9 core/java/android/content/pm/PackageItemInfo.java\n68960-p9 core/java/android/content/pm/PackageStats.java\n43920-p9 core/java/android/content/pm/ResolveInfo.java\n43920-p9 core/java/android/content/pm/ServiceInfo.java\n60641-p9 core/java/android/content/res/Configuration.java\n60734-p9 core/java/android/content/res/TypedArray.java\n137672-p9 core/java/android/inputmethodservice/ExtractButton.java\n123112-p9 core/java/android/inputmethodservice/ExtractEditText.java\n119291-p9 core/java/android/inputmethodservice/IInputMethodSessionWrapper.java\n112946-p9 core/java/android/inputmethodservice/IInputMethodWrapper.java\n115078-p9 core/java/android/os/BatteryStats.java\n124790-p9 core/java/android/text/style/UpdateAppearance.java\n45083-p9 core/java/android/view/RawInputEvent.java\n101491-p9 core/java/android/view/inputmethod/EditorInfo.java\n114701-p9 core/java/android/view/inputmethod/ExtractedText.java\n123112-p9 core/java/android/view/inputmethod/ExtractedTextRequest.java\n119291-p9 core/java/com/android/internal/os/HandlerCaller.java\n129279-p9 core/java/com/android/internal/os/PkgUsageStats.java\n114701-p9 core/java/com/android/internal/view/IInputConnectionWrapper.java\n114701-p9 core/java/com/android/internal/view/InputConnectionWrapper.java\n84364-p9 opengl/java/android/opengl/EGLLogWrapper.java\n11355-p9 opengl/tools/glgen/src/CFunc.java\n11355-p9 opengl/tools/glgen/src/CType.java\n11355-p9 opengl/tools/glgen/src/CodeEmitter.java\n11355-p9 opengl/tools/glgen/src/GenerateGL.java\n11355-p9 opengl/tools/glgen/src/JFunc.java\n11355-p9 opengl/tools/glgen/src/JType.java\n11355-p9 opengl/tools/glgen/src/JniCodeEmitter.java\n11355-p9 opengl/tools/glgen/src/ParameterChecker.java\n57236-p9 services/java/com/android/server/status/AnimatedImageView.java\n66754-p9 services/java/com/android/server/status/CloseDragHandle.java\n57188-p9 services/java/com/android/server/status/DateView.java\n46928-p9 services/java/com/android/server/status/ExpandedView.java\n70590-p9 services/java/com/android/server/status/FixedSizeDrawable.java\n45968-p9 services/java/com/android/server/status/IconData.java\n57470-p9 services/java/com/android/server/status/IconMerger.java\n82719-p9 services/java/com/android/server/status/LatestItemView.java\n45968-p9 services/java/com/android/server/status/NotificationData.java\n66754-p9 services/java/com/android/server/status/NotificationLinearLayout.java\n57458-p9 services/java/com/android/server/status/NotificationViewList.java\n45968-p9 services/java/com/android/server/status/StatusBarException.java\n45968-p9 services/java/com/android/server/status/StatusBarIcon.java\n46130-p9 services/java/com/android/server/status/StatusBarNotification.java\n45968-p9 services/java/com/android/server/status/StatusBarView.java\n46199-p9 services/java/com/android/server/status/Ticker.java\n62286-p9 services/java/com/android/server/status/TickerView.java\n57188-p9 services/java/com/android/server/status/TrackingView.java\n86041-p9 telephony/java/android/telephony/PhoneStateListener.java\n87020-p9 telephony/java/com/android/internal/telephony/TelephonyIntents.java\n136269-p9 telephony/java/com/android/internal/telephony/gsm/SpnOverride.java\n34409-p9 tests/FrameworkTest/src/com/android/frameworktest/FrameworkTestApplication.java\n55717-p9 tests/FrameworkTest/src/com/android/frameworktest/performance/InvalidateCycle.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/AutoCompleteTextViewActivityLandscape.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/AutoCompleteTextViewActivityPortrait.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityNonScrollablePanScan.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityNonScrollableResize.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityScrollablePanScan.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityScrollableResize.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/BottomEditTextActivityPanScan.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/BottomEditTextActivityResize.java\n127341-p9 tests/ImfTest/src/com/android/imftest/samples/ButtonActivity.java\n129347-p9 tests/ImfTest/src/com/android/imftest/samples/DialogActivity.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/EditTextActivityDialog.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityNoScrollPanScan.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityScrollPanScan.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityScrollResize.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/OneEditTextActivityNotSelected.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/OneEditTextActivitySelected.java\n25959-p9 tests/framework-tests/src/android/test/FrameworkTests.java\n46162-p9 tests/framework-tests/src/com/android/internal/http/multipart/MultipartTest.java\n77101-p9 tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java\n9788976b1465ce982b5ae7c741345edd0ecd9322 core/java/android/accounts/AuthenticatorDescription.java\n53332883543868fb83e111a07306368b7772b340 core/java/android/app/UiModeManager.java\n93e7e22ec91dbc641d10ca6d70423e1357a95bba core/java/android/app/FullBackupAgent.java\n328c0e7986aa6bb7752ec6de3da9c999920bb55f core/java/android/content/CursorEntityIterator.java\n307da1a46b4c9b711bafe8fbaaa6b98e8868c18e core/java/android/content/SyncQueue.java\n307da1a46b4c9b711bafe8fbaaa6b98e8868c18e core/java/android/content/SyncOperation.java\neb034652c2037a47ebfd99779e8383bb8bb528af core/java/android/content/pm/LabeledIntent.java\n49237345d83e62fdb9eb8d50b13ad086636a04fa core/java/android/content/pm/FeatureInfo.java\na2b6c3775ed6b8924232d6a01bae4a19740a15f8 core/java/android/content/pm/PackageInfoLite.java\n3ecd5f437580e49d80beecd29489d5fb1f7a7db0 core/java/android/content/pm/RegisteredServicesCacheListener.java\n5ebbb4a6b3e16f711735ae0615b9a9ea64faad38 core/java/android/content/pm/XmlSerializerAndParser.java\nc4516a7b62de525e3d6d5e76851bdfaf12c11f05 core/java/android/database/sqlite/SQLiteTransactionListener.java\n9bbc21a773cbdfbef2876a75c32bda5839647751 core/java/com/android/internal/backup/LocalTransport.java\n21f1bd17b2dfe361acbb28453b3f3b1a110932fa core/java/com/android/internal/content/PackageMonitor.java\n4c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3 core/java/com/android/internal/view/BaseSurfaceHolder.java\n4c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3 core/java/com/android/internal/view/BaseIWindow.java\ne540833fdff4d58e37c9ba859388e24e2945ed45 core/java/com/android/internal/os/SamplingProfilerIntegration.java\n192ab903887bbb8e7c7b6da5c581573850e30f46 core/tests/coretests/src/android/widget/expandablelistview/PositionTesterContextMenuListener.java\n1619367ab823150fa8856d419abe02ceb75886f1 media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java\n27f8002e591b5c579f75b2580183b5d1c4219cd4 opengl/tools/glgen/stubs/gles11/glGetString.java\n560814f6b11abe83ff0c4ed18cac015c276b3181 opengl/tools/glgen/stubs/gles11/glGetProgramInfoLog.java\n560814f6b11abe83ff0c4ed18cac015c276b3181 opengl/tools/glgen/stubs/gles11/glGetShaderInfoLog.java\n560814f6b11abe83ff0c4ed18cac015c276b3181 opengl/tools/glgen/stubs/gles11/glShaderSource.java\n1c4907ee77392afb768c2f088e0dedbe4239f6fb opengl/tools/glgen/src/GenerateGLES.java\n1c4907ee77392afb768c2f088e0dedbe4239f6fb opengl/tools/glgen/src/Jsr239CodeEmitter.java\n1c4907ee77392afb768c2f088e0dedbe4239f6fb opengl/tools/glgen/src/GLESCodeEmitter.java\n69e21f5f6e0d04539cd92848ea009dd615d88c2c opengl/tests/gldual/src/com/android/gldual/TriangleRenderer.java\nc028be4f3b8c7476b46859f66c3f33d528adf181 packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java\n7c6efa13f129dbae5319f0981a430d4662f43354 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerMeasurement.java\n7c6efa13f129dbae5319f0981a430d4662f43354 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerTestActivity.java\n7c6efa13f129dbae5319f0981a430d4662f43354 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerTestRunner.java\ndf8a3f31d871db25e952972c2eb346a71186e9e3 tests/BrowserTestPlugin/src/com/android/testplugin/TestPlugin.java\ncfaef699e1dfb3a75d5b51f3b15816f13670fd51 tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java\ncfaef699e1dfb3a75d5b51f3b15816f13670fd51 tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java\ncfaef699e1dfb3a75d5b51f3b15816f13670fd51 tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java\n\nCopyright header moved to top in following file:\n\ncore/tests/coretests/src/android/widget/ListViewTest.java\n\nChange-Id: I3c3198be5a0ba36e18679ed834170432bf0b8418\n"
    },
    {
      "commit": "83835359e51ddb8be37cea9bf4bb32f9390d82b7",
      "tree": "bcbde4ee7da376786b2850e0d7068516abd510e4",
      "parents": [
        "80b9af448e2f229f2950e21be2dca0531d796a37"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Mar 04 18:12:44 2010 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Mar 06 10:55:24 2010 -0800"
      },
      "message": "Clarify the default algorithm used to choose an EGLConfig.\n\nExplicitly default to an RGB_565 android.view.Surface.\n"
    },
    {
      "commit": "4a2221ec4a929976be570ad096252c8dea326e19",
      "tree": "f26fca340770c2784f7f08c59316c7ee951af791",
      "parents": [
        "931bf89d327ecf07301231fd86b17deac535feaa"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Mar 06 10:39:27 2010 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Mar 06 10:39:27 2010 -0800"
      },
      "message": "Fix inverted release-EGLContext-on-pause logic.\n\nThis works around a bug in the\n\"Q3Dimension MSM7500\" driver. That driver only\nsupports a single active EGLContext, so we must\nrelease and restore the EGLContext when pausing\nand unpausing.\n\nUnfortunately the test for deciding whether to\nrelease the context was inverted. We were\nreleasing the context on every device besides\nthe MSM7500 devices, which was a performance\ndrain, and we were not releasing the context on\nthe MSM7500, which meant the underlying driver\nbug was not worked around.\n\nNow we release the EGL context when pausing only\non the devices that have the bug.\n"
    },
    {
      "commit": "8a4de4be9ed522c704a45a44a265669e10a8f2eb",
      "tree": "bce6f8ba6f1773dded916701044535a3deb190d9",
      "parents": [
        "f9e573ec337e79043a5ee74fe3c03d97b31e11e6"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jan 28 20:28:32 2010 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jan 28 20:28:32 2010 +0800"
      },
      "message": "Implement the GL11ExtensionPack APIs.\n"
    },
    {
      "commit": "840e958847f31f835dbf17ce539c9f8317251cc9",
      "tree": "ece9118966b309d7c6fc9f3bc2a91f171791b731",
      "parents": [
        "308596eda112d48bcea217e58223b4672d94d600"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jan 18 15:13:12 2010 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jan 18 15:13:12 2010 +0800"
      },
      "message": "Decouple the EGL context lifetime from the EGL surface lifetime.\n\nThe EGL context is now preserved when possible. Previously we would\ndestroy it whenever the EGL surface was destroyed. Preserving the\nEGL context preserves loaded textures and VBO resources.\n"
    },
    {
      "commit": "8af9649d44745adba8be4db4e96af053ba32f2c5",
      "tree": "37edf1d80159b99ad69c1bf1622d3095c28a0563",
      "parents": [
        "a6276fdd4253c3a7150ab675678c750473ab6c45"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Dec 31 15:29:28 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Dec 31 15:29:28 2009 +0800"
      },
      "message": "Fix javadoc typos."
    },
    {
      "commit": "a6276fdd4253c3a7150ab675678c750473ab6c45",
      "tree": "d025885cd75cd415b62eb7757d25c05174c3db49",
      "parents": [
        "8eb3ea659761edc2cd5db3acf448059f19389e5e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Dec 28 19:31:43 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Dec 31 13:31:04 2009 +0800"
      },
      "message": "A library for encoding and decoding ETC1 textures.\n\nThe ETC1 compressed texture format is commonly\nsupported by OpenGL ES 2.0-capable devices.\n"
    },
    {
      "commit": "66a4a6e45f59f72f24d710221c27db1bd233e154",
      "tree": "21a1f118bd5b11596df872825390acde373c7e8b",
      "parents": [
        "21799450ec751fd3c41c7e66e69fefb094b3050b"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Dec 21 17:39:58 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Dec 21 17:39:58 2009 +0800"
      },
      "message": "Fix merge conflict markers that accidentally got checked in.\n\n(They were in a comment, so it wasn\u0027t detected by the compiler.)\n"
    },
    {
      "commit": "21799450ec751fd3c41c7e66e69fefb094b3050b",
      "tree": "97bb8d957e78bd77c97cc7547aa16a9ac26d0882",
      "parents": [
        "0f10c2bd328da35ab8aeb534af2d3f51416b3e2c"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Dec 21 14:47:35 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Dec 21 14:47:35 2009 +0800"
      },
      "message": "Fix bug 2325244\tscreen turns black for a brief period of time\n\nThe problem was a black first frame when creating a surface, or a\ngarbage frame when the surface was resized.\n\nThe cause was lack of synchronization between the render thread and the\nUI thread. The UI thread would typically return before the render thread\nhad a chance to draw its first frame.\n\nThe fix was to make the UI thread wait until at least one frame had been\nrendered by the rendering thread.\n\nThe waiting is done in the surfaceChanged method because we know\nthat surfaceChanged will be called in both the surface created\nand surface changed cases.\n"
    },
    {
      "commit": "bcf848e096b600ee36430849ade76826c3062196",
      "tree": "bad3123e46c2cad286e8bd0389889accbe297dfc",
      "parents": [
        "4c2fc8cb2571061371a34e736f157686ba57a779",
        "74befcc7fd721ca34f60bf75e18ce6faaab37aef"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Dec 10 12:16:37 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Dec 10 12:16:37 2009 -0800"
      },
      "message": "am 74befcc7: am 981ccfbb: Implement Matrix Palette extension.\n\nMerge commit \u002774befcc7fd721ca34f60bf75e18ce6faaab37aef\u0027\n\n* commit \u002774befcc7fd721ca34f60bf75e18ce6faaab37aef\u0027:\n  Implement Matrix Palette extension.\n"
    },
    {
      "commit": "4c2fc8cb2571061371a34e736f157686ba57a779",
      "tree": "933d94ad6bdde1ec0297f0e0693b8d9fb0bbf207",
      "parents": [
        "b9863ec01b7721a6b64b51cd5d306871fc58da57",
        "fac576360f7b2cd06e6b174894e8d192088349b0"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Dec 10 12:13:54 2009 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Dec 10 12:13:54 2009 -0800"
      },
      "message": "resolved conflicts for merge of fac57636 to master\n"
    },
    {
      "commit": "981ccfbbfd737e2bdf0cedec0089975f91fd4e0a",
      "tree": "1625a7d2cc71a5f8e86f0dc575069e030c8ac0e3",
      "parents": [
        "aa396b9610f339cf280159144fbea47506f060e7"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Dec 08 15:43:51 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 09 16:34:46 2009 +0800"
      },
      "message": "Implement Matrix Palette extension.\n\nAdds support for formerly-unimplemented methods:\n\nglCurrentPaletteMatrixOES\nglLoadPaletteFromModelViewMatrixOES\nglMatrixIndexPointerOES\nglWeightPointerOES\n\nThe bulk of the changes are related to implementing the two PointerOES\nmethods, which are implemented pretty much the same way as the existing\nPointer methods were implemented.\n\nThis change also changes the way glPointSizePointerOES is implemented,\nmaking it act like all the other Pointer methods. (Previously it was\nnot handling non-direct-buffer arguments correctly.)\n\nFixes bug 2308625 \"Support matrix palette skinning\nin JSR239 and related APIs\"\n\nAlso updated GLLogWraper to fix two bugs in GLLogWrapper that were\ndiscovered while testing matrix palette skinning support:\n\na) Handle trying to print the contents of null-but-enabled buffers.\n(It\u0027s not legal to draw with null-but-enabled buffers, and\nin fact some OpenGL drivers will crash if you try to render in this\nstate, but there\u0027s no reason the GLLogWrapper should crash while trying\nto debug this situation.\n\nb) Don\u0027t read off the end of a vertex buffer with non-zero position when\nprinting the entire contents of the vertex buffer. Now we only print from\nthe current position to the end of the buffer.\n"
    },
    {
      "commit": "aa396b9610f339cf280159144fbea47506f060e7",
      "tree": "cde57c6f229bf98c256e6411d87d86eedb8ef1fa",
      "parents": [
        "0dce2dd26699e4dbfba8b8c5ea01f7fd03369e02"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 27 19:59:05 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 09 16:34:42 2009 +0800"
      },
      "message": "Unhide the Android OpenGL ES 2.0 API\n\nAdd a Matrix.setLookAtM method for computing a look-at viewing transform.\n\nChange GLU.lookAt to use Matrix.setLook.\n"
    },
    {
      "commit": "0dce2dd26699e4dbfba8b8c5ea01f7fd03369e02",
      "tree": "248e09a9cd55f92b9b97110850320af9ed6566aa",
      "parents": [
        "3608891b83af9fbd1af9b9a411f2a90e52353ff8"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Nov 19 19:08:52 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 09 16:34:34 2009 +0800"
      },
      "message": "Extend GLSurfaceView to make it easy to create an OpenGL ES 2.0 context\n\nProvide a new method, GLSurfaceView.setEGLContextClientVersion. Clients\ncall this method to define which level of OpenGL ES support they want.\n\nThis method only affects the default behavior of GLSurfaceView. If clients\nhave supplied their own EGLContextFactory or EGLConfigChooser then they\nare on their own if they want to create an OpenGL ES 2.0 context.\n\nThis API is currently hidden.\n\nUpdate the gl2_java test to use this new API.\n\nUpdate the gl2_java test\u0027s AndroidManifest.xml file to indicate that\nit requires OpenGL ES 2.0.\n"
    },
    {
      "commit": "3608891b83af9fbd1af9b9a411f2a90e52353ff8",
      "tree": "bde3e48044987e890ddeaf490e07c62cb788588f",
      "parents": [
        "9fbb534ebddb2ae43e862a3bc0ff5859358b194b"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Nov 19 16:34:55 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 09 16:34:33 2009 +0800"
      },
      "message": "Add a Java API for OpenGL ES 2.0.\n\nCurrently this API is hidden.\n\nAdd a test program.\n"
    },
    {
      "commit": "5c47265a704cb0cc081b79e191442f99014726b0",
      "tree": "b162ef47569b58713fd90ac0a6ad4e7402b02a3e",
      "parents": [
        "7279fb9aee1abae405384e2c4331b7d9fec28294",
        "be6eac828f5af8b608c3fa6749330f1dcd6b6206"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 08 20:13:44 2009 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 08 20:13:44 2009 -0800"
      },
      "message": "Merge change Ibe6eac82\n\n* changes:\n  Implement Matrix Palette extension.\n"
    },
    {
      "commit": "be6eac828f5af8b608c3fa6749330f1dcd6b6206",
      "tree": "8e34bfeec9ea1f57a5022f48be43e3a7b09859eb",
      "parents": [
        "e35cfda3ae0be72a4ca1a18a81bf51fad901709a"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Dec 08 15:43:51 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Dec 08 15:43:51 2009 +0800"
      },
      "message": "Implement Matrix Palette extension.\n\nAdds support for formerly-unimplemented methods:\n\nglCurrentPaletteMatrixOES\nglLoadPaletteFromModelViewMatrixOES\nglMatrixIndexPointerOES\nglWeightPointerOES\n\nThe bulk of the changes are related to implementing the two PointerOES\nmethods, which are implemented pretty much the same way as the existing\nPointer methods were implemented.\n\nThis change also changes the way glPointSizePointerOES is implemented,\nmaking it act like all the other Pointer methods. (Previously it was\nnot handling non-direct-buffer arguments correctly.)\n\nFixes bug 2308625 \"Support matrix palette skinning\nin JSR239 and related APIs\"\n\nAlso updated GLLogWraper to fix two bugs in GLLogWrapper that were\ndiscovered while testing matrix palette skinning support:\n\na) Handle trying to print the contents of null-but-enabled buffers.\n(It\u0027s not legal to draw with null-but-enabled buffers, and\nin fact some OpenGL drivers will crash if you try to render in this\nstate, but there\u0027s no reason the GLLogWrapper should crash while trying\nto debug this situation.\n\nb) Don\u0027t read off the end of a vertex buffer with non-zero position when\nprinting the entire contents of the vertex buffer. Now we only print from\nthe current position to the end of the buffer.\n"
    },
    {
      "commit": "c373edbf1c7066668b8bf5fe90edd3fedd94c78b",
      "tree": "87d1b2f0fb7edec9569136ab353ed77e4083d5b4",
      "parents": [
        "e8a43b236754038b61a85eb294fdb03c18e82a00",
        "9196034b84c48844799a2904ef3ce31f18ee748e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Dec 07 14:55:39 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Dec 07 14:55:39 2009 -0800"
      },
      "message": "am 9196034b: am 30d90523: Merge changes Id682ab72,I9bb4dbae into eclair-mr2\n\nMerge commit \u00279196034b84c48844799a2904ef3ce31f18ee748e\u0027\n\n* commit \u00279196034b84c48844799a2904ef3ce31f18ee748e\u0027:\n  Improve error message thrown when eglCreateContext fails.\n  Improve error reporting by always returning the public\n"
    },
    {
      "commit": "9bb4dbae91df0971038e955ef49c5d9a64d4a428",
      "tree": "fd26f392ac4891ae5ce880c161cd0b9e084ed927",
      "parents": [
        "d682ab72c5b7781109b0f30ac16202441fb925d6"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Dec 04 17:15:07 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Dec 04 17:15:07 2009 +0800"
      },
      "message": "Improve error message thrown when eglCreateContext fails.\n"
    },
    {
      "commit": "d682ab72c5b7781109b0f30ac16202441fb925d6",
      "tree": "a474f497ea34b3a20ed3da1f1cef30d67fd743f8",
      "parents": [
        "39b082356851e29ba7a0af981eaa27d3b08a387b"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Dec 04 17:07:31 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Dec 04 17:07:31 2009 +0800"
      },
      "message": "Improve error reporting by always returning the public\nEGL10.EGL_NO_XXX objects for displays, surfaces, and contexts.\n\nThis allows clients to compare the returned object against\nthe public EGL10.EGL_NO_XXX object using a simple \u003d\u003d operation.\n\nThis fixes bug 2303947 \"Java layer EGL API makes it difficult\nto tell when certain methods have failed\"\n"
    },
    {
      "commit": "51438c18f5af96c16ac33a85b3ebaacf200b7b5e",
      "tree": "370d6bcb2e20899100ae4f1ea70976bcb2b6c322",
      "parents": [
        "a45e925108f6c9d35d9e7b5e8def9aba49ee0dba"
      ],
      "author": {
        "name": "Li Wenhao",
        "email": "gliwenhao@gmail.com",
        "time": "Wed Jul 29 14:45:08 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Dec 02 21:15:33 2009 -0800"
      },
      "message": "the vertex index should be \"first + i\".\n"
    },
    {
      "commit": "355c20cb9276148fd9b7074c5199aedeb497406e",
      "tree": "d4085aab602da9d15a7ff7bf492dc224d64bc854",
      "parents": [
        "d2fa1ff139f23bf6e92495b916a4afb6a43bab3f"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 27 19:59:05 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 27 20:03:13 2009 +0800"
      },
      "message": "Unhide the Android OpenGL ES 2.0 API\n\nAdd a Matrix.setLookAtM method for computing a look-at viewing transform.\n\nChange GLU.lookAt to use Matrix.setLook.\n"
    },
    {
      "commit": "6a9a87da47bcfb032d0585f41d77abb6300ea63c",
      "tree": "543acf14fcee71d9faa1c17f54aa68192d347716",
      "parents": [
        "54b9a7c9f1b5def5ee1bde515b3fecaafc238014",
        "85a9498a2f33d62a4313a3561b5468456974696e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 25 14:12:04 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 25 14:12:04 2009 -0800"
      },
      "message": "am 85a9498a: am 9c0b39c4: am ca00dee2: Merge change I5aa3adcf into eclair\n\nMerge commit \u002785a9498a2f33d62a4313a3561b5468456974696e\u0027\n\n* commit \u002785a9498a2f33d62a4313a3561b5468456974696e\u0027:\n  Improve the exception message text by including eglGetError().\n"
    },
    {
      "commit": "85a9498a2f33d62a4313a3561b5468456974696e",
      "tree": "d253b0415c7ba791e2478ee6f1e527beb2323e0b",
      "parents": [
        "03c185bf763fd2a289131d64e4b14d4a5461d80f",
        "9c0b39c47efade5ee2303a8f8ffbd9cf87c2c841"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 25 14:04:14 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 25 14:04:14 2009 -0800"
      },
      "message": "am 9c0b39c4: am ca00dee2: Merge change I5aa3adcf into eclair\n\nMerge commit \u00279c0b39c47efade5ee2303a8f8ffbd9cf87c2c841\u0027 into eclair-mr2-plus-aosp\n\n* commit \u00279c0b39c47efade5ee2303a8f8ffbd9cf87c2c841\u0027:\n  Improve the exception message text by including eglGetError().\n"
    },
    {
      "commit": "9c0b39c47efade5ee2303a8f8ffbd9cf87c2c841",
      "tree": "22f00f90c4efac18e962bdeba071fd79227d259d",
      "parents": [
        "c61b0de83bc0c6f7bb1d10bcfc02ab29f3a49caa",
        "ca00dee21425882619aef4ecbe3e0d08de0544e5"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 25 13:48:54 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 25 13:48:54 2009 -0800"
      },
      "message": "am ca00dee2: Merge change I5aa3adcf into eclair\n\nMerge commit \u0027ca00dee21425882619aef4ecbe3e0d08de0544e5\u0027 into eclair-mr2\n\n* commit \u0027ca00dee21425882619aef4ecbe3e0d08de0544e5\u0027:\n  Improve the exception message text by including eglGetError().\n"
    },
    {
      "commit": "5aa3adcf304ec3767b3c22128acb23240d8d0bab",
      "tree": "2ceb679ff56e9964bacc79c3e29c744f58a131c0",
      "parents": [
        "55896f3c5121e73e3f657ed14e7ee8937ad72449"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 25 13:56:21 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 25 13:56:21 2009 +0800"
      },
      "message": "Improve the exception message text by including eglGetError().\n\nShould help us track down the cause of bug 2285187\n"
    },
    {
      "commit": "6ae4da75422bbb31c3e0a09f616cdaee1d465946",
      "tree": "e005e9f77fc54e462bc4f3b90c397b017a217f70",
      "parents": [
        "560814f6b11abe83ff0c4ed18cac015c276b3181"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Nov 19 19:08:52 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Nov 19 19:08:52 2009 +0800"
      },
      "message": "Extend GLSurfaceView to make it easy to create an OpenGL ES 2.0 context\n\nProvide a new method, GLSurfaceView.setEGLContextClientVersion. Clients\ncall this method to define which level of OpenGL ES support they want.\n\nThis method only affects the default behavior of GLSurfaceView. If clients\nhave supplied their own EGLContextFactory or EGLConfigChooser then they\nare on their own if they want to create an OpenGL ES 2.0 context.\n\nThis API is currently hidden.\n\nUpdate the gl2_java test to use this new API.\n\nUpdate the gl2_java test\u0027s AndroidManifest.xml file to indicate that\nit requires OpenGL ES 2.0.\n"
    },
    {
      "commit": "560814f6b11abe83ff0c4ed18cac015c276b3181",
      "tree": "ef52858af693f7e154514349d2f300c69e3183b0",
      "parents": [
        "f9cf96ae1d342b1af659041e1bc5d464126f8e49"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Nov 19 16:34:55 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Nov 19 16:34:55 2009 +0800"
      },
      "message": "Add a Java API for OpenGL ES 2.0.\n\nCurrently this API is hidden.\n\nAdd a test program.\n"
    },
    {
      "commit": "85d3f59ca0fcce0d405d9a024c1e5ff7352803a2",
      "tree": "393e0338eebdde3f54b5a4c995b07bc36bf852bd",
      "parents": [
        "90ea9af3e1f531b1cfcbe9443c26dec9082f75fd",
        "8d0e14723312a9f8286ba95cc559ee000eab1b82"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 17 07:34:53 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 17 07:34:53 2009 -0800"
      },
      "message": "am 8d0e1472: am a822f02b: resolved conflicts for merge of dc49acb0 to eclair-mr2\n\nMerge commit \u00278d0e14723312a9f8286ba95cc559ee000eab1b82\u0027\n\n* commit \u00278d0e14723312a9f8286ba95cc559ee000eab1b82\u0027:\n  More GLSurfaceView cleanup.\n"
    },
    {
      "commit": "8d0e14723312a9f8286ba95cc559ee000eab1b82",
      "tree": "ab91d91583b668c17e1c37cf79eabfb5447fe1d0",
      "parents": [
        "e5fa335b0dffbd06385b6de05ae04b2bd2ea277e",
        "a822f02bb9c7f5bf2e3fa3cb63effc391be158c5"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Nov 16 19:52:12 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Nov 16 19:52:12 2009 -0800"
      },
      "message": "am a822f02b: resolved conflicts for merge of dc49acb0 to eclair-mr2\n\nMerge commit \u0027a822f02bb9c7f5bf2e3fa3cb63effc391be158c5\u0027 into eclair-mr2-plus-aosp\n\n* commit \u0027a822f02bb9c7f5bf2e3fa3cb63effc391be158c5\u0027:\n  More GLSurfaceView cleanup.\n"
    },
    {
      "commit": "a822f02bb9c7f5bf2e3fa3cb63effc391be158c5",
      "tree": "1e966e8efcebb346e51c027a7d0d4b25e29f178b",
      "parents": [
        "6e045e0aa1b465e9e989d3058a5d2fa13dcf026b",
        "dc49acb0289cab2a6e0d73e66b69516605893e28"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 17 11:39:54 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 17 11:39:54 2009 +0800"
      },
      "message": "resolved conflicts for merge of dc49acb0 to eclair-mr2\n"
    },
    {
      "commit": "a08d46d8aaabb53eef4d5dc47272565d50f23c19",
      "tree": "f2f1bb9ca023c1b40241472d40347e0cee3eecb6",
      "parents": [
        "7c1c46000be136ffda36283fdc93bfe3cba72601"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Nov 16 18:48:26 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Nov 16 18:48:26 2009 +0800"
      },
      "message": "More GLSurfaceView cleanup.\n\n+ The mDone flag is now a pair of flags: mShouldExit and mExited. The\nproblem with mDone was that it meant \"had been asked to exit\", but was\nbeing used by some observers as \"had exited\". Using two variables means\nthat observers can observe either \"had been asked to exit\" or \"had exited\",\nas they prefer.\n\n+ Simplyify where we check for mShouldExit. We now check for it at the\n  top of our innermost guardedRun while loop.\n\n+ requestExitAndWait now waits for mExited to be set to true to know\nthat a thread has exited, rather than using join(). This means we can use\nwait() for the check, which releases the sGLThreadManager\nmonitor, avoiding a potential deadlock.\n\n+ move the event queue into the sGLThreadManager monitor. This avoids\nhaving to acquire two locks in order to enque/deque events, which also\navoids the potential for lock ordering deadlocks.\n\n+ Simplify the event dequeueing code. We now deque one event each time\nthrough the main GLSurfaceView loop. Events still have priority over\nrendering, so there isn\u0027t any semantic change, it just cleans up the code.\n\n+ Avoid trying to acquire an egl Surface if we\u0027re paused.\n\n+ To simplify reasoning about the code, call sGLThreadManager.notifyAll()\nin every case where we modify one of the variables that\u0027s protected by\nthe sGLThreadManager monitor. It would be slightly more efficient to only\nnotify when we change variables that could cause a thread to wait(), but\nthen we would have to redo our analysis every time we change any code.\n\n+ Clean up the logic for creating the EGL surface and then calling the\nrenderer\u0027s onSurfaceCreated / onSurfaceChanged methods.\n\n+ Implement work-around for bug 2263168\t\"Need to draw twice after\n  screen rotation...\"\n"
    },
    {
      "commit": "cbce240a0d64f4e3ae52aadf233c708a759a7ecb",
      "tree": "ea5e2e9738a548a0a5eb05c14f65e0b9f2cd4bf6",
      "parents": [
        "ebb8d3bcf7c5559034091e4609d8ddccae2c2a1a",
        "99cf71b0856e00c1ae9631db91702349cceb9bf8"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 18:11:04 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 10 18:11:04 2009 -0800"
      },
      "message": "am 99cf71b0: am 83536cee: Merge change I1179efbb into eclair-mr2\n\nMerge commit \u002799cf71b0856e00c1ae9631db91702349cceb9bf8\u0027\n\n* commit \u002799cf71b0856e00c1ae9631db91702349cceb9bf8\u0027:\n  Fix multi-lock ordering issues in GLSurfaceView\n"
    },
    {
      "commit": "99cf71b0856e00c1ae9631db91702349cceb9bf8",
      "tree": "a00a753b096e951cce2bf9c01bc168b4ea768489",
      "parents": [
        "fbac9bdfd40b0676a914e9dae7bdd26829087cae",
        "83536cee2b2b5445c5ba0b22531c23890b82da41"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 18:06:05 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 10 18:06:05 2009 -0800"
      },
      "message": "am 83536cee: Merge change I1179efbb into eclair-mr2\n\nMerge commit \u002783536cee2b2b5445c5ba0b22531c23890b82da41\u0027 into eclair-mr2-plus-aosp\n\n* commit \u002783536cee2b2b5445c5ba0b22531c23890b82da41\u0027:\n  Fix multi-lock ordering issues in GLSurfaceView\n"
    },
    {
      "commit": "1179efbb3b8856eb8160e2dd67a300a5d64e8e98",
      "tree": "52c7fcf280eb76e4171e833e5084ae1d9437ab24",
      "parents": [
        "6780d8c006c9381919c0ee4de3d2bdc6d7a728d6",
        "ba56915a71cad672baff5594dbb7c9331bf01283"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 11 10:01:46 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Nov 11 10:01:46 2009 +0800"
      },
      "message": "resolved conflicts for merge of ba56915a to eclair-mr2\n"
    },
    {
      "commit": "67dcd6c2392caf3ff98f35a3d1ec550d229c167b",
      "tree": "424ee1b424f4fc7c69f4df0ea065c7d3dd365c06",
      "parents": [
        "e6ab011b8b8aa6c461e64cabb9b25d890d68edb1"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 18:26:42 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 18:26:42 2009 +0800"
      },
      "message": "Fix multi-lock ordering issues in GLSurfaceView\n\nThere were potential deadlocks between the per-GLThread monitors and the\nGLThreadManager monitor.\n\nTo avoid these deadlocks we now use a single monitor for\nboth the GLThreadManager state and the per-GLThread state.\n\nConverted GLThreadManager\u0027s semaphore into the equivalent\nsynchronized-wait-notifyAll code. This enables us to wait for\neither mDone, or user events, or the EGL surface with a single \"wait()\".\n\nSimplified the logic used to acquire and release the EGL surface. The\nEGL surface is now only requested while the surfaceFlinger surface\nis acquired.\n\nRemoved the \"egl surface stealing\" policy we had recently inserted.\nIt\u0027s not needed now that we reliably quit when requested.\n\nPulled user event processing outside of the  GLThreadManager monitor\nso that we don\u0027t call any potentially-long-running code while\ninside the monitor.\n\nThis should help with bug 2228262.\n"
    },
    {
      "commit": "2806a6b5ffd1003e217deebb6a9c3d3c6d9d4087",
      "tree": "fe4bba9c7d777cd2a4c85a54dd419b43996fdd46",
      "parents": [
        "7e6422c1cc9606e40332006e73542995070fb2cf",
        "73ae27f0c56fa705dcfb86d784a95b86f10e48ad"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Nov 09 16:14:25 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Nov 09 16:14:25 2009 -0800"
      },
      "message": "am 73ae27f0: am 8da3ac92: resolved conflicts for merge of 3f857b78 to eclair-mr2\n\nMerge commit \u002773ae27f0c56fa705dcfb86d784a95b86f10e48ad\u0027\n\n* commit \u002773ae27f0c56fa705dcfb86d784a95b86f10e48ad\u0027:\n  Allow a GLThread to release and reacquire the EGL Surface as needed.\n"
    },
    {
      "commit": "73ae27f0c56fa705dcfb86d784a95b86f10e48ad",
      "tree": "544814ea82e94aee5e5f552240c20fc9fddefffb",
      "parents": [
        "6720bb8314600a2b55a18159b4a22dc4b18aec88",
        "8da3ac92a6a6247ef06de4d4b684f8635d8fc003"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Nov 09 16:11:11 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Nov 09 16:11:11 2009 -0800"
      },
      "message": "am 8da3ac92: resolved conflicts for merge of 3f857b78 to eclair-mr2\n\nMerge commit \u00278da3ac92a6a6247ef06de4d4b684f8635d8fc003\u0027 into eclair-mr2-plus-aosp\n\n* commit \u00278da3ac92a6a6247ef06de4d4b684f8635d8fc003\u0027:\n  Allow a GLThread to release and reacquire the EGL Surface as needed.\n"
    },
    {
      "commit": "8da3ac92a6a6247ef06de4d4b684f8635d8fc003",
      "tree": "6384e0aecbba872ab451d47528792cbe9a07fb3d",
      "parents": [
        "26c91fa694464c79de39988f9f42cee375ff0a14",
        "3f857b78fc68e5d700139bdc6078c5333b62a9bc"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 08:04:53 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Nov 10 08:04:53 2009 +0800"
      },
      "message": "resolved conflicts for merge of 3f857b78 to eclair-mr2\n"
    },
    {
      "commit": "32d416518473f3bf5323d660e5910ca5633ffed6",
      "tree": "91f2387a92133132b0faf49989245c5ca5709291",
      "parents": [
        "a44249500f6c1c7a75b5c420fa2e81c2aa317a10"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun Nov 08 10:55:56 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun Nov 08 10:55:56 2009 +0800"
      },
      "message": "Allow a GLThread to release and reacquire the EGL Surface as needed.\n\nWe currently only allow one GLThread to have an active EGL Surface at a\ntime.(This may be lifted in the future, when EGL and GL are reentrant.)\n\nPrior to this change we would enforce this rule by having older GLThreads\nquit when a new GLThread started. That had the drawback of leaving the\nolder GLSurfaceViews in a zombie state -- their GLThreads would be\ngone.\n\nWe now enforce this rule by just releasing and reacquiring the EGL surface\ncontext as needed.\n\nSpecific changes to the code:\n\ncreated private helper methods - startEgl and stopEgl to help manage\nstarting and stopping EGL.\n\nMove the calls to sGLThreadManager start and end from the outermost run\nmethod into the startEgl / stopEgl methods.\n\nReworked the wait loop to handle starting and stopping EGL as needed.\n\nneedToWait() gets simpler -- just looks at current status.\n\nsGLThreadManager.shouldQuit was replaced by shouldHaveEgl.\n\n\nThis is another step in fixing bug 2228262.\n"
    },
    {
      "commit": "6518c2bab4e336a08e703018accdf7d5e6a6a1ad",
      "tree": "11d67241d53ce71bba2b30055e4e79e812ce7122",
      "parents": [
        "790c4294da25a9d935ed9a520f9ca3d20a48790f",
        "e54f267f06e86f9c1248742fc56967355721a4e7"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 16:56:32 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 06 16:56:32 2009 -0800"
      },
      "message": "am e54f267f: am a3a351e5: resolved conflicts for merge of 4e3fadd0 to eclair-mr2\n\nMerge commit \u0027e54f267f06e86f9c1248742fc56967355721a4e7\u0027\n\n* commit \u0027e54f267f06e86f9c1248742fc56967355721a4e7\u0027:\n  Fix stupid bug in GLThreadManager implementation.\n"
    },
    {
      "commit": "e54f267f06e86f9c1248742fc56967355721a4e7",
      "tree": "5c9afbd9db7305b1e2435e0d97a67b9e9ba8bf7e",
      "parents": [
        "a3c90d930ebabcfffd9d4d7715ad1329e1f8c2d8",
        "a3a351e5d164d0c8b461ae7af86edc0227654a76"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 16:45:58 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 06 16:45:58 2009 -0800"
      },
      "message": "am a3a351e5: resolved conflicts for merge of 4e3fadd0 to eclair-mr2\n\nMerge commit \u0027a3a351e5d164d0c8b461ae7af86edc0227654a76\u0027 into eclair-mr2-plus-aosp\n\n* commit \u0027a3a351e5d164d0c8b461ae7af86edc0227654a76\u0027:\n  Fix stupid bug in GLThreadManager implementation.\n"
    },
    {
      "commit": "a3a351e5d164d0c8b461ae7af86edc0227654a76",
      "tree": "a321acc2bd61f1ee164e4db6f01302155d719b47",
      "parents": [
        "f6ff2be323812b5525a0755d194b2fc751ba5968",
        "4e3fadd0c99d2774709a067e017d8fd622440f0e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 16:35:19 2009 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 16:35:19 2009 -0800"
      },
      "message": "resolved conflicts for merge of 4e3fadd0 to eclair-mr2\n"
    },
    {
      "commit": "a44249500f6c1c7a75b5c420fa2e81c2aa317a10",
      "tree": "7a793f8e3e1cb0abc67246af04c195dbbcd6d2b8",
      "parents": [
        "8d51f7101d2427953dbff9b4b8f8c9fdc0dc4a91"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Nov 07 07:49:15 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sat Nov 07 07:49:15 2009 +0800"
      },
      "message": "Fix stupid bug in GLThreadManager implementation.\n\nThe code intended to copy the old value of a field, before the\nfield was updated. However, what the code was actually doing was\ncopying the new value of the field, after the field was updated.\n\nThe fix was to move the copy to before the update.\n\nThis is work towards fixing bug 2228262\n"
    },
    {
      "commit": "3f7b5a13ca6fdd31c934850ed802a74714e7b2cc",
      "tree": "a800e02100f4149769e81e3178a9b1f8ad64180c",
      "parents": [
        "790bc8f1473654f2da3ad095d6560096676ecae5",
        "a9e47546a5132b30a2ed1e24d9193d4db09ef323"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 00:40:00 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 06 00:40:00 2009 -0800"
      },
      "message": "am a9e47546: am 79447b20: resolved conflicts for merge of 84872738 to eclair-mr2\n\nMerge commit \u0027a9e47546a5132b30a2ed1e24d9193d4db09ef323\u0027\n\n* commit \u0027a9e47546a5132b30a2ed1e24d9193d4db09ef323\u0027:\n  Improve GLSurfaceView to avoid deadlocks and race conditions.\n"
    },
    {
      "commit": "a9e47546a5132b30a2ed1e24d9193d4db09ef323",
      "tree": "496054740c8e481497fb631d32740bf6486ac968",
      "parents": [
        "78e502df5163e8bcdd803af7f0a3958322a288dc",
        "79447b2087c8c820d742185dda7305101f9656f0"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 00:25:44 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 06 00:25:44 2009 -0800"
      },
      "message": "am 79447b20: resolved conflicts for merge of 84872738 to eclair-mr2\n\nMerge commit \u002779447b2087c8c820d742185dda7305101f9656f0\u0027 into eclair-mr2-plus-aosp\n\n* commit \u002779447b2087c8c820d742185dda7305101f9656f0\u0027:\n  Improve GLSurfaceView to avoid deadlocks and race conditions.\n"
    },
    {
      "commit": "79447b2087c8c820d742185dda7305101f9656f0",
      "tree": "9244ad5c29a8a8d1789d7fd94647af3c86b56260",
      "parents": [
        "892574f5f91b834f70ace880301db61f60d58362",
        "84872738f291faf25ae07235cde382d38c796567"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 00:13:38 2009 -0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 00:13:38 2009 -0800"
      },
      "message": "resolved conflicts for merge of 84872738 to eclair-mr2\n"
    },
    {
      "commit": "8b2c9c9ecb08d25244fa97fb42c2c315ae3cf03d",
      "tree": "0267829c2e976a2b97f3eefa4a03ee47f9f06f6c",
      "parents": [
        "bfa68abc955ed1fe6cf6d98e42f344a8d623fab7"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 10:21:46 2009 +0800"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Nov 06 10:21:46 2009 +0800"
      },
      "message": "Improve GLSurfaceView to avoid deadlocks and race conditions.\n\nThis is work towards fixing bug 2228262\n\nSpecific issues fixed by this change:\n\n+ GLThread names now include the thread id, making it easier to tell one\nGLThread from another.\n\n+ A private final static boolean LOG_THREADS can be set to true at compile\ntime to print out thread-related trace information, helpful for debugging\nGLSurfaceView behavior. This static defaults to \"false\".\n\n+ Changed calls to \"notify\" to \"notifyAll\" to make the code more\nrobust in case more than two threads are blocked on the same monitor.\n\n+ Add a GLThreadManager to help manage the transition to\na new GLThread. Currently only one GLThread can be active in an address\nspace. When the second thread starts up, the GLThreadManager helps the old\nGLThread to shut down,\n\n+ Make sure we stop waiting for dead GLThreads. This is done by adding\nchecks for a variable mDone being true to our monitor wait loops. And\nwe use a \"finally\" clause at the end of GLThread.run() method to set mDone\nand notifyAll any wait loops.\n"
    },
    {
      "commit": "86a19b3d2c873113d6da49257cf720f90d1c2498",
      "tree": "038d510bf663dddc1f1243fabc6c778c6a7e036e",
      "parents": [
        "8f26c13e5957d24ca384f119a774968a409747fa",
        "70d12dda7c1e36850e1ed95d719bc1d6dadb6fef"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 20:10:10 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 13 20:10:10 2009 -0700"
      },
      "message": "am 70d12dda: am 3743559d: Merge change I28023911 into eclair-mr2\n\nMerge commit \u002770d12dda7c1e36850e1ed95d719bc1d6dadb6fef\u0027\n\n* commit \u002770d12dda7c1e36850e1ed95d719bc1d6dadb6fef\u0027:\n  Add additional error checking of EGL function calls.\n"
    },
    {
      "commit": "70d12dda7c1e36850e1ed95d719bc1d6dadb6fef",
      "tree": "3505d738b3c848c27d2658a5b2dd58a983e090cd",
      "parents": [
        "767741ffd5d14471b88791e5db93c08e8d2571eb",
        "3743559db03645ef7d319c0344238c335a315b65"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 20:00:51 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 13 20:00:51 2009 -0700"
      },
      "message": "am 3743559d: Merge change I28023911 into eclair-mr2\n\nMerge commit \u00273743559db03645ef7d319c0344238c335a315b65\u0027 into eclair-mr2-plus-aosp\n\n* commit \u00273743559db03645ef7d319c0344238c335a315b65\u0027:\n  Add additional error checking of EGL function calls.\n"
    },
    {
      "commit": "28023911a4b572f0ca640e7a3e3f9a0dd6f535e9",
      "tree": "51676df2e0efb856b7b300e47fff9a8f5fbb9a47",
      "parents": [
        "3b7a1e6d70fda4ce834034930847fe2cc75de515"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 19:52:06 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 19:52:06 2009 -0700"
      },
      "message": "Add additional error checking of EGL function calls.\n"
    },
    {
      "commit": "ef79172c5501ea0110c24c24871d3b62be8997ed",
      "tree": "8aebd99fa1d28dd98bab4ca3a6562b54e4d27134",
      "parents": [
        "4ec63785662fc9f0343e8f8da22949aa2418699c",
        "98a51b86869e9cf2a1624f8540c4c126962a3a85"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 18:20:28 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 13 18:20:28 2009 -0700"
      },
      "message": "am 98a51b86: am 3b7a1e6d: Merge change Ic52ba78c into eclair-mr2\n\nMerge commit \u002798a51b86869e9cf2a1624f8540c4c126962a3a85\u0027\n\n* commit \u002798a51b86869e9cf2a1624f8540c4c126962a3a85\u0027:\n  Allow multiple OpenGL contexts on systems that support them.\n"
    },
    {
      "commit": "98a51b86869e9cf2a1624f8540c4c126962a3a85",
      "tree": "d4103f5acb97ae0f7a22dd74c5667e6fbe37db72",
      "parents": [
        "a788f09894f5b2113230a9ced9105fd6ad4c9a52",
        "3b7a1e6d70fda4ce834034930847fe2cc75de515"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 18:14:51 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 13 18:14:51 2009 -0700"
      },
      "message": "am 3b7a1e6d: Merge change Ic52ba78c into eclair-mr2\n\nMerge commit \u00273b7a1e6d70fda4ce834034930847fe2cc75de515\u0027 into eclair-mr2-plus-aosp\n\n* commit \u00273b7a1e6d70fda4ce834034930847fe2cc75de515\u0027:\n  Allow multiple OpenGL contexts on systems that support them.\n"
    },
    {
      "commit": "c52ba78cab001ff68b4823f4769c129b8acfddee",
      "tree": "9036181a31e926c067bb58f8d7c312bd0776a3d7",
      "parents": [
        "69e21f5f6e0d04539cd92848ea009dd615d88c2c"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 17:58:47 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Oct 13 17:58:47 2009 -0700"
      },
      "message": "Allow multiple OpenGL contexts on systems that support them.\n\nPreviously we always restricted the number of OpenGL contexts to 1.\n"
    },
    {
      "commit": "d70213e70ed4b2648d696a554a0ba7dac4c32757",
      "tree": "62edecccc19e3b7a6b1542e85a52015726d99297",
      "parents": [
        "20e3c9d818d914eb04783d32448b8102fe41974e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Oct 12 19:20:49 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Oct 12 19:20:49 2009 -0700"
      },
      "message": "Implement GL11 and GL11Ext methods for GL Log and Error wrappers.\n\nUntil now we had been throwing UnsupportedOperationException when\ndevelopers tried to use the GL11 or GL11Ext methods. Now we handle\nthese methods correctly, passing their arguments through to the\nwrapped interface\u0027s methods.\n\nFixes bug 2167522\tGLUtils debug wrapper doesn\u0027t support GL11 features\n"
    },
    {
      "commit": "a46c138ab37e141f195d449f453dda8bd1df0947",
      "tree": "f75f710e3a0b6b1d388ec1925877d13092bb4f16",
      "parents": [
        "dd9649931fa2ce3a9fa469438cd81fc748355be0",
        "07e0dce441ea056710efd76d7df18b8833de772a"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Sep 25 19:16:13 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 25 19:16:13 2009 -0700"
      },
      "message": "am 07e0dce4: Merge change 27202 into eclair\n\nMerge commit \u002707e0dce441ea056710efd76d7df18b8833de772a\u0027 into eclair-plus-aosp\n\n* commit \u002707e0dce441ea056710efd76d7df18b8833de772a\u0027:\n  Check for failure to create EGL surfaces and contexts.\n"
    },
    {
      "commit": "2e26fc08aa1939c19e939d983bd608cdec050024",
      "tree": "7f3caddcb9c5a5e7e8c4e24177e86bd1cee3e98b",
      "parents": [
        "7756cbeef475127ed56bfeabecb3c291366a952f"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Sep 25 19:06:30 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Sep 25 19:06:30 2009 -0700"
      },
      "message": "Check for failure to create EGL surfaces and contexts.\n"
    },
    {
      "commit": "bf0d9041202eb52b036a8a5854dd6fef55d87919",
      "tree": "cf6c89a73a53c06163d884deca2185e08dde1947",
      "parents": [
        "54a0c801d56e455278fcfdfd8be27b6dc73c48eb",
        "b87f24a6a88a994256ca97b69904af28824bc9ce"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 14:16:48 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 24 14:16:48 2009 -0700"
      },
      "message": "am b87f24a6: Merge change 26908 into eclair\n\nMerge commit \u0027b87f24a6a88a994256ca97b69904af28824bc9ce\u0027 into eclair-plus-aosp\n\n* commit \u0027b87f24a6a88a994256ca97b69904af28824bc9ce\u0027:\n  Fix broken Javadoc link for GLSurfaceView.EGLWindowSurfaceFactory.\n"
    },
    {
      "commit": "d40dfbbbff81219258ca36b762a89ff503154345",
      "tree": "98fc5a33661c54f4173b3cc1e68174a5b1058ef1",
      "parents": [
        "f22fc124ff7974d0b6380199f7d53e66bb7feb29"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 14:10:17 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 14:10:17 2009 -0700"
      },
      "message": "Fix broken Javadoc link for GLSurfaceView.EGLWindowSurfaceFactory.\n"
    },
    {
      "commit": "c055f173c9211b27184c56ce385df5278db4011c",
      "tree": "51c1a1999147ebb946fe1fc28c7c47910e69587e",
      "parents": [
        "34b9dab1ba1db40378a3f425d0591d17e2fb91be",
        "1267b0e1844ac802de92b203007513573e4886fd"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 12:06:29 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 24 12:06:29 2009 -0700"
      },
      "message": "am 1267b0e1: Merge change 26882 into eclair\n\nMerge commit \u00271267b0e1844ac802de92b203007513573e4886fd\u0027 into eclair-plus-aosp\n\n* commit \u00271267b0e1844ac802de92b203007513573e4886fd\u0027:\n  Publish minor additions to GLSurfaceView API.\n"
    },
    {
      "commit": "82cbaab450d3c5d9f3d52c49881212f250d7cd97",
      "tree": "56d65701be8b2e4710a03bdafcde925318fd0bf6",
      "parents": [
        "4cc86e1ae80eb1938500fe5fa06bbdf8b4b7b50d"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 11:55:04 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Sep 24 11:55:04 2009 -0700"
      },
      "message": "Publish minor additions to GLSurfaceView API.\n\nClients can now modify the way that the EGL context and the EGL window\nsurface are created and destroyed.\n"
    },
    {
      "commit": "b09c63e24043a6ca03f04709a92f528d233fd8d7",
      "tree": "f7d941d8545d7ad20b4bee7a4b1876af479186ce",
      "parents": [
        "5ddbc0d59d8143d50a19950624c38fdb8102156b",
        "311ed0191d6423e41b1cf5137a38e53504494818"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Sep 23 15:03:46 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 23 15:03:46 2009 -0700"
      },
      "message": "am 311ed019: Merge change 26679 into eclair\n\nMerge commit \u0027311ed0191d6423e41b1cf5137a38e53504494818\u0027 into eclair-plus-aosp\n\n* commit \u0027311ed0191d6423e41b1cf5137a38e53504494818\u0027:\n  Create samples showing how to call OpenGL from JNI libraries.\n"
    },
    {
      "commit": "a8fecb87c5eaaefc9ca6272e3b59ef88d293dd6d",
      "tree": "7652f77751c0f9aa13629288c325e82d272e65cf",
      "parents": [
        "63147705bc2893d6ad43270e04beb9ee01e2ad53"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Sep 23 14:48:07 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Sep 23 14:48:07 2009 -0700"
      },
      "message": "Create samples showing how to call OpenGL from JNI libraries.\n"
    },
    {
      "commit": "e2317438433d4f2f822fe0c3659e70c89f6a707f",
      "tree": "b3ea23b2a1a1eb6da5694c9ad9086f8f3e93dab2",
      "parents": [
        "4a1d8788dec5630b7a1874f661c6cbd1fc863328",
        "1167b43c3d1ca232c9b4e0a75343b6b3cb90f0df"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 19:31:42 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 21 19:31:42 2009 -0700"
      },
      "message": "am 1167b43c: Merge change 26317 into eclair\n\nMerge commit \u00271167b43c3d1ca232c9b4e0a75343b6b3cb90f0df\u0027 into eclair-plus-aosp\n\n* commit \u00271167b43c3d1ca232c9b4e0a75343b6b3cb90f0df\u0027:\n  Allow GLSurfaceView clients to customize EGL Surfaces and Contexts.\n"
    },
    {
      "commit": "15e1c6dc7a778590068b1cad55beea2bc6159509",
      "tree": "c35207d5fd479c56b89fa9b4388393bba092d70d",
      "parents": [
        "1bd888ba2e0976a179258cfa65ef07be31602a0a"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 19:19:25 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 19:19:25 2009 -0700"
      },
      "message": "Allow GLSurfaceView clients to customize EGL Surfaces and Contexts.\n\nThis API is hidden for now, will expose once it\u0027s been tested more.\n"
    },
    {
      "commit": "5ac5b68bf103036843deb2e489d07e46c49c4bbd",
      "tree": "c3630b1503d6c8a6e8ad1fe15417bc7a2c877fcb",
      "parents": [
        "5c5be2499f25853d0af2154862e648a10da2e4c6",
        "5222a9571ea2538c989608d376ac71eabe0f09d4"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 16:09:45 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 21 16:09:45 2009 -0700"
      },
      "message": "am 5222a957: Merge change 26270 into eclair\n\nMerge commit \u00275222a9571ea2538c989608d376ac71eabe0f09d4\u0027 into eclair-plus-aosp\n\n* commit \u00275222a9571ea2538c989608d376ac71eabe0f09d4\u0027:\n  Fix GLSurfaceView to sync surfaceDestroyed with GL rendering thread\n"
    },
    {
      "commit": "1bd888ba2e0976a179258cfa65ef07be31602a0a",
      "tree": "5d1d9ef76fd5f1c29e029f1ead80e0116548ade1",
      "parents": [
        "a953ed4bc08cf5fc98f17a399adbd8afdd8293d5"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 15:59:17 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Sep 21 15:59:17 2009 -0700"
      },
      "message": "Fix GLSurfaceView to sync surfaceDestroyed with GL rendering thread\n\nUntil now we had a race condition where the GL rendering thread could\ncontinue rendering a frame after we have returned from the\nSurfaceHolder.Callback.surfaceDestroyed notification.\n"
    },
    {
      "commit": "85a2c7f1cad8fd55ed72a8a3dbb2b36632ebbff3",
      "tree": "36dea48bb2bef6646ae333bad57af4955b5379f8",
      "parents": [
        "f84b803478eeb3ce34da55f242d9b9685c6c943d",
        "0369a7c3ac97b4791716ddd183e83309b1455476"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Tue Sep 01 11:46:14 2009 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Tue Sep 01 11:46:14 2009 -0700"
      },
      "message": "merge from open-source master\n"
    },
    {
      "commit": "0648422f6721953cee30941b6798ded18e0ad2fb",
      "tree": "42e18673e9ae841fb1d5d284d09bda754d6b7748",
      "parents": [
        "46ba1c964f10fc9bd604134e5b20483daa0c86a9",
        "219749df3ef8ad8efa4a1d4889403e179c268067"
      ],
      "author": {
        "name": "Android Code Review",
        "email": "code-review@android.com",
        "time": "Tue Aug 25 14:37:40 2009 -0700"
      },
      "committer": {
        "name": "Android Code Review",
        "email": "code-review@android.com",
        "time": "Tue Aug 25 14:37:40 2009 -0700"
      },
      "message": "Merge change 10840\n\n* changes:\n  the vertex index should be \"first + i\".\n"
    }
  ],
  "next": "82fd4fce16b9bbde25d044acc86ddf7306ebdd10"
}
