Loading tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -45,4 +45,10 @@ public class AttachInfo_Accessor { public static void dispatchOnPreDraw(View view) { public static void dispatchOnPreDraw(View view) { view.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); view.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); } } public static void detachFromWindow(View view) { if (view != null) { view.dispatchDetachedFromWindow(); } } } } tools/layoutlib/bridge/src/android/view/ViewRootImpl_RunQueue_Delegate.java 0 → 100644 +37 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; /** * Delegate used to provide new implementation of a select few methods of * {@link ViewRootImpl.RunQueue} * * Through the layoutlib_create tool, the original methods of ViewRootImpl.RunQueue have been * replaced by calls to methods of the same name in this delegate class. * */ public class ViewRootImpl_RunQueue_Delegate { @LayoutlibDelegate /*package*/ static void postDelayed(ViewRootImpl.RunQueue thisQueue, Runnable action, long delayMillis) { // The actual RunQueue is never run and therefore never cleared. This method avoids // runnables to be added to the RunQueue so they do not leak resources. } } tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -208,6 +208,9 @@ public class BridgeRenderSession extends RenderSession { @Override @Override public void dispose() { public void dispose() { if (mSession != null) { mSession.dispose(); } } } /*package*/ BridgeRenderSession(RenderSessionImpl scene, Result lastResult) { /*package*/ BridgeRenderSession(RenderSessionImpl scene, Result lastResult) { Loading tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +17 −0 Original line number Original line Diff line number Diff line Loading @@ -1396,4 +1396,21 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { public RenderSession getSession() { public RenderSession getSession() { return mScene; return mScene; } } public void dispose() { AttachInfo_Accessor.detachFromWindow(mViewRoot); if (mCanvas != null) { mCanvas.release(); mCanvas = null; } if (mViewInfoList != null) { mViewInfoList.clear(); } if (mSystemViewInfoList != null) { mSystemViewInfoList.clear(); } mImage = null; mViewRoot = null; mContentRoot = null; } } } tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -291,7 +291,6 @@ public class Main { @Test @Test public void testActivity() throws ClassNotFoundException { public void testActivity() throws ClassNotFoundException { renderAndVerify("activity.xml", "activity.png"); renderAndVerify("activity.xml", "activity.png"); } } /** Test allwidgets.xml */ /** Test allwidgets.xml */ Loading Loading @@ -431,6 +430,8 @@ public class Main { ImageUtils.requireSimilar(goldenImagePath, session.getImage()); ImageUtils.requireSimilar(goldenImagePath, session.getImage()); } catch (IOException e) { } catch (IOException e) { getLogger().error(e, e.getMessage()); getLogger().error(e, e.getMessage()); } finally { session.dispose(); } } } } Loading Loading
tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -45,4 +45,10 @@ public class AttachInfo_Accessor { public static void dispatchOnPreDraw(View view) { public static void dispatchOnPreDraw(View view) { view.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); view.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); } } public static void detachFromWindow(View view) { if (view != null) { view.dispatchDetachedFromWindow(); } } } }
tools/layoutlib/bridge/src/android/view/ViewRootImpl_RunQueue_Delegate.java 0 → 100644 +37 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; /** * Delegate used to provide new implementation of a select few methods of * {@link ViewRootImpl.RunQueue} * * Through the layoutlib_create tool, the original methods of ViewRootImpl.RunQueue have been * replaced by calls to methods of the same name in this delegate class. * */ public class ViewRootImpl_RunQueue_Delegate { @LayoutlibDelegate /*package*/ static void postDelayed(ViewRootImpl.RunQueue thisQueue, Runnable action, long delayMillis) { // The actual RunQueue is never run and therefore never cleared. This method avoids // runnables to be added to the RunQueue so they do not leak resources. } }
tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -208,6 +208,9 @@ public class BridgeRenderSession extends RenderSession { @Override @Override public void dispose() { public void dispose() { if (mSession != null) { mSession.dispose(); } } } /*package*/ BridgeRenderSession(RenderSessionImpl scene, Result lastResult) { /*package*/ BridgeRenderSession(RenderSessionImpl scene, Result lastResult) { Loading
tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +17 −0 Original line number Original line Diff line number Diff line Loading @@ -1396,4 +1396,21 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { public RenderSession getSession() { public RenderSession getSession() { return mScene; return mScene; } } public void dispose() { AttachInfo_Accessor.detachFromWindow(mViewRoot); if (mCanvas != null) { mCanvas.release(); mCanvas = null; } if (mViewInfoList != null) { mViewInfoList.clear(); } if (mSystemViewInfoList != null) { mSystemViewInfoList.clear(); } mImage = null; mViewRoot = null; mContentRoot = null; } } }
tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -291,7 +291,6 @@ public class Main { @Test @Test public void testActivity() throws ClassNotFoundException { public void testActivity() throws ClassNotFoundException { renderAndVerify("activity.xml", "activity.png"); renderAndVerify("activity.xml", "activity.png"); } } /** Test allwidgets.xml */ /** Test allwidgets.xml */ Loading Loading @@ -431,6 +430,8 @@ public class Main { ImageUtils.requireSimilar(goldenImagePath, session.getImage()); ImageUtils.requireSimilar(goldenImagePath, session.getImage()); } catch (IOException e) { } catch (IOException e) { getLogger().error(e, e.getMessage()); getLogger().error(e, e.getMessage()); } finally { session.dispose(); } } } } Loading