Expose View.executeHardwareAction()
Bug #10911502 Views creating hardware resources need a way to safely interact with the hardware. This new method invokes HardwareRenderer.safelyRun() which executes a Runnable after making sure the hardawre rendering context is in a valid state. With the OpenGL backend, executeHardwareAction() tries to call eglMakeCurrent() if needed. This method is not guaranteed to work. Change-Id: I38ec65132eeba85605cffb1a6de12b7a0184e213
This commit is contained in:
@@ -213,8 +213,8 @@ public class TextureView extends View {
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
if (mLayer != null && mAttachInfo != null && mAttachInfo.mHardwareRenderer != null) {
|
||||
boolean success = mAttachInfo.mHardwareRenderer.safelyRun(new Runnable() {
|
||||
if (mLayer != null) {
|
||||
boolean success = executeHardwareAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
destroySurface();
|
||||
|
||||
@@ -12368,6 +12368,33 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method ensures the hardware renderer is in a valid state
|
||||
* before executing the specified action.
|
||||
*
|
||||
* This method will attempt to set a valid state even if the window
|
||||
* the renderer is attached to was destroyed.
|
||||
*
|
||||
* This method is not guaranteed to work. If the hardware renderer
|
||||
* does not exist or cannot be put in a valid state, this method
|
||||
* will not executed the specified action.
|
||||
*
|
||||
* The specified action is executed synchronously.
|
||||
*
|
||||
* @param action The action to execute after the renderer is in a valid state
|
||||
*
|
||||
* @return True if the specified Runnable was executed, false otherwise
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public boolean executeHardwareAction(Runnable action) {
|
||||
//noinspection SimplifiableIfStatement
|
||||
if (mAttachInfo != null && mAttachInfo.mHardwareRenderer != null) {
|
||||
return mAttachInfo.mHardwareRenderer.safelyRun(action);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void invalidateInheritedLayoutMode(int layoutModeOfRoot) {
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user