)]}'
{
  "log": [
    {
      "commit": "5c88fc744db977ef26887df9605beaa409394806",
      "tree": "3c782510909ace46a555514d9b08044289107406",
      "parents": [
        "6db53c34a7fe8fdc2a8775dc5a400776e2716d38"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Apr 02 17:43:05 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Apr 02 17:45:25 2012 -0700"
      },
      "message": "Prevent crash when flushing the layers cache\nBug #6258973\n\nWhen flushing the layer caches we would attempt to delete the FBOs\nassociate with layers in the cache. The FBO property was however not\nalways properly cleared when recycling layers.\n\nChange-Id: I7dedfe391d659a0849f1e1d84df17313b2c6e2b2\n"
    },
    {
      "commit": "a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5",
      "tree": "25fabe19bc7667a756c27aec7b541acee0f49def",
      "parents": [
        "e829bc0f0364e942bed01536d115a5c08d25d776"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 13 14:55:06 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 13 14:58:14 2011 -0800"
      },
      "message": "Further reduce the number of GL commands sent to the driver\n\nChange-Id: Id922b2a166ea4573b767c27d3195e11c70320b23\n"
    },
    {
      "commit": "39d252a6632d057d5077f7eaf1b8ed7a142f3397",
      "tree": "c840b4084ba7fb8be54b0d387953cc6a15decbdd",
      "parents": [
        "f44e66fcf70aa4a354deca72dfbd3b29c29302be"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 18:14:06 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 18:14:06 2011 -0800"
      },
      "message": "Various OpenGL optimizations\n\nChange-Id: Ib0742c96f10f5f50e7e5148b742c31b6c232d127\n"
    },
    {
      "commit": "28d8ff6dbcc1b137131c70b72b4dbd211db7fbd9",
      "tree": "38a49302ac1bd3c05a85bb09ce26e5c5d45debd6",
      "parents": [
        "6d97842849bed82affbd45251529f85f0958a6b8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 22 14:01:34 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 22 14:01:34 2011 -0700"
      },
      "message": "Move constants to the correct header\n\nChange-Id: Id4bd14f72487bd7156cd2e1930eaf97b47896273\n"
    },
    {
      "commit": "65b345fa22b878e141b8fd8ece9c208df00fa40f",
      "tree": "587ba028a74320da19f8eeddbd4a2fb377e68cb4",
      "parents": [
        "6d7475d666baefaa3ba9f0dcee25238739454241"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 27 18:51:50 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 27 18:51:50 2011 -0700"
      },
      "message": "Reclaim more memory, more often.\n\nYay.\n\nChange-Id: I04557ad575c307a55088549f48f0e9ad994b7275\n"
    },
    {
      "commit": "eea60692b060737faeaa02bb30f5b79e2202b482",
      "tree": "3dcf0aee4e80c38b0475250767a37901e686fde7",
      "parents": [
        "912a7b32d0c59ba38265c5dd6ff84ce93f909a7f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 26 20:35:55 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 26 20:35:55 2011 -0700"
      },
      "message": "Improve layers debugging\n\nChange-Id: Ia4950dd5f0e0a224ecb69c581d33aa4f32260a7c\n"
    },
    {
      "commit": "912a7b32d0c59ba38265c5dd6ff84ce93f909a7f",
      "tree": "e4a7ef6e99a302ce7489d773b004dfb984fa2c30",
      "parents": [
        "7c0d89ac97260634c3687c8c8136328c967d68ed"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 26 18:57:28 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 26 18:57:28 2011 -0700"
      },
      "message": "Make sure we have a current EGL context when invoking EGL\nBug #5081795\n\nChange-Id: Iee3382d362a71c1e6c5c498b319bf7f7bcf5a2f0\n"
    },
    {
      "commit": "e3c26851dc315b730ea0fe5ef35bb1db81f6d675",
      "tree": "bc3fbae626f785fa38e40d4f5ab3737777d9a1ef",
      "parents": [
        "29d23ecfd8612ecd4a7b2140acd344934b73a558"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 25 16:36:01 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 25 16:36:01 2011 -0700"
      },
      "message": "Improve rendering performance on some GPUs\n\nThis change sets textures filtering to GL_NEAREST by default. GL_LINEAR\nfiltering is only used when textures are transformed with a scale or\na rotation. This helps save a couple of fps on some GPUs.\n\nChange-Id: I1efaa452c2c79905f00238e54d886a37203a2ac1\n"
    },
    {
      "commit": "9ace8f5e79e76893fe4ca9e4d10f6c4056330485",
      "tree": "dac712f57ecba04e50aac7c5934498d9be89c8a1",
      "parents": [
        "f61970fc79e9c5cf340fa942597628242361864a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 07 20:50:11 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 07 20:50:11 2011 -0700"
      },
      "message": "Use NEAREST filtering for layers whenever possible.\n\nChange-Id: Id5bee1bd4a322cf93e8000b08e18f1e1b058648e\n"
    },
    {
      "commit": "aa6c24c21c727a196451332448d4e3b11a80be69",
      "tree": "27114ab3852d31723d885f3846ee874a07247126",
      "parents": [
        "9fc27819d75e24ad63d7b383d80f5cb66a577a0d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 28 18:40:04 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 28 18:46:19 2011 -0700"
      },
      "message": "New widget: TextureView\nBug #4343984\n\nTextureView can be used to render media content (video, OpenGL,\nRenderScript) inside a View.\n\nThe key difference with SurfaceView is that TextureView does\nnot create a new Surface. This gives the ability to seamlessly\ntransform, animate, fade, etc. a TextureView, which was hard\nif not impossible to do with a SurfaceView.\nA TextureView also interacts perfectly with ScrollView,\nListView, etc. It allows application to embed media content\nin a much more flexible way than before.\n\nFor instance, to render the camera preview at 50% opacity,\nall you need to do is the following:\n\nmTextureView.setAlpha(0.5f);\nCamera c \u003d Camera.open();\nc.setPreviewTexture(mTextureView.getSurfaceTexture());\nc.startPreview();\n\nTextureView uses a SurfaceTexture to get the job done. More\nAPIs are required to make it easy to create OpenGL contexts\nfor a TextureView. It can currently be done with a bit of\nJNI code.\n\nChange-Id: Iaa7953097ab5beb8437bcbbfa03b2df5b7f80cd7\n"
    },
    {
      "commit": "09b7c91de73b59aa3f679b3ae3ba299f82ec9f8a",
      "tree": "9eb49f2fedb60e6df37b54216ed20f054a6f55fd",
      "parents": [
        "62687ec12cb8e0b1d4044a235b1387b9a8c3b4b4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 02 20:28:09 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 02 20:28:09 2011 -0800"
      },
      "message": "Allocate layers from the layers pool.\nBug #3413433\n\nThis change will be beneficial to Launcher to avoid hiccups when\nswiping pages of icons. When a layer is discarded, it is kept\nin the layers pool instead of being destroyed right away. This\nfavors memory reuse over allocations.\n\nChange-Id: Ifb6944ba83d6ceb67c331527c0827b26ce648eb1\n"
    },
    {
      "commit": "c9855a53edfac818dc68714557185977556f849d",
      "tree": "7ace2dd62d887408e84f8a09c43e60de26b436b6",
      "parents": [
        "6828656220f4ed5ae803e4c11fb75fb56bc3ea25"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 21 21:14:15 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 21 21:14:15 2011 -0800"
      },
      "message": "Log only 1 line per process when using OpenGLRenderer.\n\nChange-Id: Idbdd6b84f31301e58ed53e0d50fd61fece192dfa\n"
    },
    {
      "commit": "171c592f0b7066acf279863c8a52ddabea49d3db",
      "tree": "eebf9a8c82c6a6d9db6edbf077b9299a96ae36e4",
      "parents": [
        "f0fe6d311d183c5fcf45d5e3e995fc8f9ed12f8b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 06 10:04:23 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 06 18:34:30 2011 -0800"
      },
      "message": "New layers API for Views.\n\nThis API can be used to back a view and its children with either a\nsoftware layer (bitmap) or hardware layer (FBO). Layers have\nvarious usages, including color filtering and performance\nimprovements during animations.\n\nChange-Id: Ifc3bea847918042730fc5a8c2d4206dd6c9420a3\n"
    },
    {
      "commit": "e91080581f467d55913a8c5ab53dedc2dab2e5b6",
      "tree": "ef4bfc31fac147b8a36b3c3d6593726106825032",
      "parents": [
        "1f114a55b5eaaa81bd302c9ad851362512b61e2f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 18:15:42 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 18:15:42 2010 -0700"
      },
      "message": "Tweak layers caching for better performance in Launcher.\n\nChange-Id: Ia6e67699d98f69c8a93385b3ecbdd814c7b16921\n"
    },
    {
      "commit": "8550c4c7b5952b7a4e1e0ede95c9492d03099a13",
      "tree": "3f2bccdd02bcf390eac98749475aad4ead1da1e4",
      "parents": [
        "ecd31740a00f8fb07090209cd979257c38cbcc92"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 08 15:49:53 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 08 15:49:53 2010 -0700"
      },
      "message": "Better cache for layers, reduce memory usage and increase framerate.\n\nChange-Id: I5ff864a361db4791bd5ff6be716f7ce692ef572d\n"
    },
    {
      "commit": "eb99356a0548684a501766e6a524529ab93304c8",
      "tree": "7beb40beea2f12944057cd025ca8b212d3a01855",
      "parents": [
        "7adaf3d1aa18c7e521f7154e545fe52d329763c3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 05 18:14:38 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 05 18:14:38 2010 -0700"
      },
      "message": "Optimize saveLayer() when the clip flag is set.\n\nThis speeds up applications, especially Launcher."
    },
    {
      "commit": "0bb5667b4ef91fefd0500fae0186789d15d54e0e",
      "tree": "92dfccfc1a428b6124e2a41061cde6a403976cd1",
      "parents": [
        "557ed7aa290497fb5764acb3f577edbe78bad5b9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Oct 01 00:25:02 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Oct 01 00:25:02 2010 -0700"
      },
      "message": "Fix INVALID_OPERATION error with layers rendering.\n\nThis change is a workaround for a driver bug that causes an INVALID_OPERATION\nto be thrown on every glCopyTexSubImage() call. This change also adds a new\ntest for gradients local matrices.\n\nChange-Id: I41b7437481026702d0a3a9677f099b4557c0a84e\n"
    },
    {
      "commit": "38c85b907a478af96d71b9a5df5a2066b8475311",
      "tree": "03c8ffe517ff14b71fb24e29ca43c3eb482ba442",
      "parents": [
        "806de5b1c5f98d67b00f7ba6087faca3b9632845"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 22 22:48:20 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 22 22:51:12 2010 -0700"
      },
      "message": "Correctly initialize/refresh layers.\n\nChange-Id: Id8cdcf587b13098460f7d4aa1bd17708784d89bb\n"
    },
    {
      "commit": "b025b9c8b4efefadb01937db61a1f8ee7d2452bf",
      "tree": "dabed85e1e6b4aad2363925c779b783855b02d7e",
      "parents": [
        "857d7cf80ee37fc3b1d55ecfa4c27029672f5114"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 16 14:16:48 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 16 14:16:48 2010 -0700"
      },
      "message": "Better error handling in the OpenGL renderer.\n\nAdd a glGetError() check on every frame\nDon\u0027t attempt to create textures larger than the maximum size allowed\n\nChange-Id: Iee4afae16089406dbe8bf10fc93b674f1271a0ca\n"
    },
    {
      "commit": "f607bdc167f66b3e7003acaa4736ae46d78c1492",
      "tree": "b3b4fb761b25d08ba836ff822f6e72d85b5be695",
      "parents": [
        "d14f0dfd58af653a2d41424d472fe97de6af0a78"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 10 19:20:06 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 12 12:24:12 2010 -0700"
      },
      "message": "Correct implementation of saveLayer().\n\nChange-Id: I5375126636913e0a84f2d6bbd0ebe40d2e4f2763\n"
    },
    {
      "commit": "fb8b763f762ae21923c58d64caa729b012f40e05",
      "tree": "013792d41f32bff4dd35e6d53eebac711c513729",
      "parents": [
        "a1f1174b396cda7bdff469a2e974a737600c5eb0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 23 21:05:08 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 24 17:18:14 2010 -0700"
      },
      "message": "Use only one GL context per process, share chaches.\n\nChange-Id: Ieabaa25338d2f4b8d4fd90e7401ad6e7452eae11\n"
    },
    {
      "commit": "1e79386ba34f0db38c1b35b22cdf122632534354",
      "tree": "35c3fe20c2dc66823ac1c7970e395748d8fe52a3",
      "parents": [
        "079ba2c85b15e882629b8d188f5fbdb42f7f8eea"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 15:07:42 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 15:07:42 2010 -0700"
      },
      "message": "Optimize textures binding.\n\nThe renderer is still changing textures\u0027 wrap modes every time, this will require\na latter optimization.\n\nChange-Id: I3eb92cb8c886c4a692b7f0ca759911f9371d4d2c\n"
    },
    {
      "commit": "f18fd99b5c182329cd8936a9611f0103d8ece44a",
      "tree": "c32def6bcb82e2a2019a5a49744dfa34c94d8d81",
      "parents": [
        "132f22590a3cd27ce15a705bdb481675e8fd02bc"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 08 11:45:51 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 08 11:45:51 2010 -0700"
      },
      "message": "Create FBOs in LayerCache.\n\nThis moves a bit of code away from OpenGLRenderer and matches\nwhat happens with the TextureCache.\n\nChange-Id: I3c67f54f83d7240770daa015861c0e75a1dd8c42\n"
    },
    {
      "commit": "6c81893c626499e58c8eeb20d6c35ec4e1ce808b",
      "tree": "d4926e6c4952de9aec539f1b44ed0380779e12d0",
      "parents": [
        "3038f47d1c716f9385cf0befc08e708c65f069bb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 15:15:32 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 15:15:32 2010 -0700"
      },
      "message": "Simpler way to deal with the FBO multi-cache.\n\nThis change removes the need for the SortedList and instead just\nadd a generated id to each FBO stored in the cache. This is an\nartificial way to store several FBOs with the same dimensions.\n\nChange-Id: I9638364e9bdc0f2391261937a0c86096f20505bf\n"
    },
    {
      "commit": "5f0c6a483900f3989f4d2a8f913cf5b6a9777d03",
      "tree": "cd0898b027dab942753874a070c403ca9b88e4aa",
      "parents": [
        "c832baa107f36740e462c83e7525ba2e9f01f086"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 13:06:26 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 13:06:26 2010 -0700"
      },
      "message": "Optimize FBO cache.\n\nThis change introduces a new generational cache called GenerationMultiCache\nthat can store several values with the same key. This can be used to use\nmultiple layers of the same size at the same time, without recreating them\nover and over again.\n\nChange-Id: I425466a20908b862c5f464a0f9e582ec18cbd7ac\n"
    },
    {
      "commit": "dda570201ac851dd85af3861f7e575721d3345da",
      "tree": "795e46c7cae42b22814af1ef2ac70c083debd746",
      "parents": [
        "216108c492fef05261c70f1018d94cef0c3b23fd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Tue Jul 06 11:39:32 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Tue Jul 06 12:00:33 2010 -0700"
      },
      "message": "Add a layer (FBO) cache.\n\nThe cache is used to draw layers so that a new\ntexture does not have to be recreated every time\na call to saveLayer() happens.\n\nThe FBO cache used a KeyedVector, which is a bad\nidea. The cache should be able to store several\nFBOs of the same size (this happens a lot during\nscrolling with fading edges for instance.) This\nwill be changed in a future CL.\n\nChange-Id: Ic316189e625f0dbcf0d273a71cc981a433d48726\n"
    }
  ]
}
