mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
// Copyright 2013 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 UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_
|
|
#define UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_
|
|
|
|
#include <queue>
|
|
|
|
#include "ui/gfx/vsync_provider.h"
|
|
|
|
namespace gfx {
|
|
|
|
// Base class for providers based on extensions like GLX_OML_sync_control and
|
|
// EGL_CHROMIUM_sync_control.
|
|
class SyncControlVSyncProvider : public VSyncProvider {
|
|
public:
|
|
SyncControlVSyncProvider();
|
|
~SyncControlVSyncProvider() override;
|
|
|
|
void GetVSyncParameters(const UpdateVSyncCallback& callback) override;
|
|
|
|
protected:
|
|
virtual bool GetSyncValues(int64* system_time,
|
|
int64* media_stream_counter,
|
|
int64* swap_buffer_counter) = 0;
|
|
|
|
virtual bool GetMscRate(int32* numerator, int32* denominator) = 0;
|
|
|
|
private:
|
|
base::TimeTicks last_timebase_;
|
|
uint64 last_media_stream_counter_;
|
|
base::TimeDelta last_good_interval_;
|
|
bool invalid_msc_;
|
|
|
|
// A short history of the last few computed intervals.
|
|
// We use this to filter out the noise in the computation resulting
|
|
// from configuration change (monitor reconfiguration, moving windows
|
|
// between monitors, suspend and resume, etc.).
|
|
std::queue<base::TimeDelta> last_computed_intervals_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider);
|
|
};
|
|
|
|
} // namespace gfx
|
|
|
|
#endif // UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_
|