/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.react.uimanager; import com.facebook.react.bridge.ReactContext; import com.facebook.react.modules.core.ChoreographerCompat; /** * Abstract base for a Choreographer FrameCallback that should have any RuntimeExceptions it throws * handled by the {@link com.facebook.react.bridge.NativeModuleCallExceptionHandler} registered if * the app is in dev mode. */ public abstract class GuardedFrameCallback extends ChoreographerCompat.FrameCallback { private final ReactContext mReactContext; protected GuardedFrameCallback(ReactContext reactContext) { mReactContext = reactContext; } @Override public final void doFrame(long frameTimeNanos) { try { doFrameGuarded(frameTimeNanos); } catch (RuntimeException e) { mReactContext.handleException(e); } } /** * Like the standard doFrame but RuntimeExceptions will be caught and passed to * {@link com.facebook.react.bridge.ReactContext#handleException(RuntimeException)}. */ protected abstract void doFrameGuarded(long frameTimeNanos); }