blob: 8b7170836b4b489f3e07b3e1f30bbf841de6f81c [file] [log] [blame]
// Copyright 2018 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.
#ifndef COMPONENTS_VIZ_SERVICE_FRAME_SINKS_EXTERNAL_BEGIN_FRAME_SOURCE_ANDROID_H_
#define COMPONENTS_VIZ_SERVICE_FRAME_SINKS_EXTERNAL_BEGIN_FRAME_SOURCE_ANDROID_H_
#include <jni.h>
#include "base/android/jni_weak_ref.h"
#include "base/macros.h"
#include "components/viz/common/frame_sinks/begin_frame_source.h"
#include "components/viz/service/viz_service_export.h"
namespace viz {
// An implementation of ExternalBeginFrameSource which is driven by VSync
// signals coming from org.chromium.ui.VSyncMonitor.
class VIZ_SERVICE_EXPORT ExternalBeginFrameSourceAndroid
: public ExternalBeginFrameSource,
public ExternalBeginFrameSourceClient {
public:
ExternalBeginFrameSourceAndroid(uint32_t restart_id, float refresh_rate);
~ExternalBeginFrameSourceAndroid() override;
void OnVSync(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jlong time_micros,
jlong period_micros);
void UpdateRefreshRate(float refresh_rate) override;
private:
// ExternalBeginFrameSourceClient implementation.
void OnNeedsBeginFrames(bool needs_begin_frames) override;
void SetEnabled(bool enabled);
uint64_t next_sequence_number_ = BeginFrameArgs::kStartingFrameNumber;
base::android::ScopedJavaGlobalRef<jobject> j_object_;
// Used for determining what the sequence number should be on
// CreateBeginFrameArgs.
base::TimeTicks next_expected_frame_time_;
DISALLOW_COPY_AND_ASSIGN(ExternalBeginFrameSourceAndroid);
};
} // namespace viz
#endif // COMPONENTS_VIZ_SERVICE_FRAME_SINKS_EXTERNAL_BEGIN_FRAME_SOURCE_ANDROID_H_