1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_VSYNC_PROVIDER_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_VSYNC_PROVIDER_H_
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "base/task/sequenced_task_runner.h"
#include "base/time/time.h"
#include "third_party/blink/renderer/platform/graphics/video_frame_sink_bundle.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/webrtc_overrides/metronome_source.h"
namespace blink {
// Interface for a class that can request begin frame callbacks, and request a
// callback to be called when the tab visibility changes.
class PLATFORM_EXPORT VSyncProvider {
public:
virtual ~VSyncProvider() = default;
// Initializes with a callback called with a boolean indicating whether VSync
// callbacks can be expected, whenever the value changes (for example on tab
// occlusion). The callback can be called on any context.
virtual void Initialize(
base::RepeatingCallback<void(bool /*visible*/)> callback) = 0;
// Sets a vsync callback. The callback can be called on any context.
virtual void SetVSyncCallback(base::OnceClosure callback) = 0;
};
// Concrete implementation that connects to the VideoFrameSinkBundle
// corresponding to the task runner provided in the constructor.
class PLATFORM_EXPORT VSyncProviderImpl : public VSyncProvider {
public:
VSyncProviderImpl(scoped_refptr<base::SequencedTaskRunner> task_runner,
uint32_t frame_sink_client_id);
// BeginFrameProvider overrides.
void Initialize(
base::RepeatingCallback<void(bool /*visible*/)> callback) override;
void SetVSyncCallback(base::OnceClosure callback) override;
private:
class BeginFrameObserver;
const scoped_refptr<base::SequencedTaskRunner> task_runner_;
const uint32_t frame_sink_client_id_;
// Weak ptr to be dereferenced only on the video frame compositor thread.
base::WeakPtr<BeginFrameObserver> weak_observer_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_VSYNC_PROVIDER_H_
|