{"push_id":2765199581,"size":1,"distinct_size":1,"ref":"refs/heads/c8.1","head":"e00076d893b3c9631a1bd70d3fb8533da46ce0ad","before":"f40e5941be550d8e36e7d8b5949004cccf6a6ce5","commits":[{"sha":"e00076d893b3c9631a1bd70d3fb8533da46ce0ad","author":{"name":"Robert Carr","email":"5067a505da964ed337ba08ba2b83e6cad981fa28@google.com"},"message":"SurfaceFlinger: Update parent pointer while performing transaction.\n\nTo understand the change at a high level, notice that all the usage\nof getParent() is assosciated with the drawing state. We see in this way\nthat the parent is a part of the drawing state and should only be updated\nwhen transactions occurs.\n\nMore specifically we can consider the following scenario:\n\n1. Imagine that we have a visible surface, with a visible child surface\n2. Now imagine we create a new surface, which is hidden, and post a buffer to it.\n   It is configured such that it would be visible if it were not hidden.\n3. We open a transaction\n4. We reparent the child from the old surface to the new one\n5. We show the new surface\n6. We close the transaction\n\nAt this point we would expect the child to remain visible, as it is atomically\nreparented with the visibility change of the parent. However prior to this CL\nwe see a flash, as the sequence can continue as follows:\n\n7. Closing the transaction triggers setClientState, causing Layer::reparentChildren\n   which would call setParent updating the parent pointer.\n8. setClientState updates the current but not drawing visibility of the new parent and marks\n   a transaction to occur.\n9. We return to the main thread, MESSAGE_REFRESH occurs before MESSAGE_TRANSACTION\n   and we render a frame\n10. We observe the child window as invisible, as it has the new parent\n    but it's new parent is not yet visible.\n\nWe simply have to ensure the parent pointer is updated at transaction time.\nI chose a location in commitChildList where mDrawingChildren was copied\nfrom mCurrentChildren as it seemed to express the intent well.\n\nTest: Difficult to automatically test. Manually try resizing Chrome/Youtube/etc in docked stack before flicker should be ~1/10 after flicker should be <1/100 (I haven't seen one yet)\nBug: 62099658\nChange-Id: I3721d16361b53128146510d3fda43e1c12f93223","distinct":true,"url":"https://api.github.com/repos/CandyRoms/frameworks_native/commits/e00076d893b3c9631a1bd70d3fb8533da46ce0ad"}]}
{"actor":{"display_login":"CandyShop"}}