@Override public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) { if (mNeedToRender) { if (mPendingSwapBuffers + mPendingRenders <= MAX_SWAP_BUFFER_COUNT) { mNeedToRender = false; mPendingRenders++; render(); } else { TraceEvent.instant("ContentViewRenderView:bail"); } } if (mVSyncListener != null) { if (mVSyncNotificationEnabled) { for (mCurrentVSyncListenersIterator.rewind(); mCurrentVSyncListenersIterator.hasNext(); ) { mCurrentVSyncListenersIterator.next().onVSync(vsyncTimeMicros); } mVSyncMonitor.requestUpdate(); } else { // Compensate for input event lag. Input events are delivered immediately on // pre-JB releases, so this adjustment is only done for later versions. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { vsyncTimeMicros += INPUT_EVENT_LAG_FROM_VSYNC_MICROSECONDS; } mVSyncListener.updateVSync(vsyncTimeMicros, mVSyncMonitor.getVSyncPeriodInMicroseconds()); } } }
void requestUpdate() { mVSyncMonitor.requestUpdate(); }
void setVSyncListener(VSyncManager.Listener listener) { mVSyncListener = listener; if (mVSyncListener != null) mVSyncMonitor.requestUpdate(); }
@Override public void registerVSyncListener(VSyncManager.Listener listener) { if (!mVSyncNotificationEnabled) mVSyncMonitor.requestUpdate(); mCurrentVSyncListeners.addObserver(listener); mVSyncNotificationEnabled = true; }