blob: 3c8cc117cff646b6646c3330e92ea928cc2e52d2 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.mojo.vsync;
import android.view.Choreographer;
import org.chromium.mojo.system.MojoException;
import org.chromium.mojom.vsync.VSyncProvider;
/**
* Android implementation of VSyncProvider.
*/
public class VSyncProviderImpl implements VSyncProvider, Choreographer.FrameCallback {
private final Choreographer mChoreographer;
private AwaitVSyncResponse mCallback;
private Binding mBinding = null;
public VSyncProviderImpl() {
mChoreographer = Choreographer.getInstance();
}
public void setBinding(Binding binding) {
if (mBinding != null) {
mBinding.unbind().close();
}
mBinding = binding;
}
@Override
public void close() {}
@Override
public void onConnectionError(MojoException e) {}
@Override
public void awaitVSync(final AwaitVSyncResponse callback) {
if (mCallback != null) {
setBinding(null);
return;
}
mCallback = callback;
mChoreographer.postFrameCallback(this);
}
@Override
public void doFrame(final long frameTimeNanos) {
mCallback.call(frameTimeNanos / 1000);
mCallback = null;
}
}