Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(887)

Unified Diff: remoting/protocol/webrtc_video_renderer_adapter.h

Issue 2200273003: Enable video stats reporting when using WebRTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address feedback Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/protocol/webrtc_video_renderer_adapter.h
diff --git a/remoting/protocol/webrtc_video_renderer_adapter.h b/remoting/protocol/webrtc_video_renderer_adapter.h
index e085129e1ca9f1a3515188e989499a95922a6a94..dec60f8a4f88982dbe224c361b18d270f94ff369 100644
--- a/remoting/protocol/webrtc_video_renderer_adapter.h
+++ b/remoting/protocol/webrtc_video_renderer_adapter.h
@@ -5,10 +5,14 @@
#ifndef REMOTING_PROTOCOL_WEBRTC_VIDEO_RENDERER_ADAPTER_H_
#define REMOTING_PROTOCOL_WEBRTC_VIDEO_RENDERER_ADAPTER_H_
+#include <list>
#include <memory>
+#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
+#include "remoting/protocol/client_video_stats_dispatcher.h"
+#include "remoting/protocol/video_stats_stub.h"
#include "third_party/webrtc/api/mediastreaminterface.h"
#include "third_party/webrtc/media/base/videosinkinterface.h"
@@ -24,33 +28,59 @@ class VideoFrameBuffer;
namespace remoting {
namespace protocol {
-struct ClientFrameStats;
+class MessagePipe;
class VideoRenderer;
+class WebrtcTransport;
+struct ClientFrameStats;
+struct HostFrameStats;
class WebrtcVideoRendererAdapter
- : public rtc::VideoSinkInterface<cricket::VideoFrame> {
+ : public rtc::VideoSinkInterface<cricket::VideoFrame>,
+ public VideoStatsStub,
+ public ClientVideoStatsDispatcher::EventHandler {
public:
- WebrtcVideoRendererAdapter(
- scoped_refptr<webrtc::MediaStreamInterface> media_stream,
- VideoRenderer* video_renderer);
+ WebrtcVideoRendererAdapter(const std::string& label,
+ VideoRenderer* video_renderer);
~WebrtcVideoRendererAdapter() override;
- std::string label() const { return media_stream_->label(); }
+ std::string label() const { return label_; }
+
+ void SetMediaStream(scoped_refptr<webrtc::MediaStreamInterface> media_stream);
+ void SetVideoStatsChannel(std::unique_ptr<MessagePipe> message_pipe);
// rtc::VideoSinkInterface implementation.
void OnFrame(const cricket::VideoFrame& frame) override;
private:
- void HandleFrameOnMainThread(std::unique_ptr<ClientFrameStats> stats,
+ // VideoStatsStub interface.
+ void OnVideoFrameStats(uint32_t frame_id,
+ const HostFrameStats& frame_stats) override;
+
+ // ClientVideoStatsDispatcher::EventHandler interface.
+ void OnChannelInitialized(ChannelDispatcherBase* channel_dispatcher) override;
+ void OnChannelClosed(ChannelDispatcherBase* channel_dispatcher) override;
+
+ void HandleFrameOnMainThread(uint32_t frame_id,
+ base::TimeTicks time_received,
scoped_refptr<webrtc::VideoFrameBuffer> frame);
- void DrawFrame(std::unique_ptr<ClientFrameStats> stats,
+ void DrawFrame(uint32_t frame_id,
+ std::unique_ptr<ClientFrameStats> stats,
std::unique_ptr<webrtc::DesktopFrame> frame);
- void FrameRendered(std::unique_ptr<ClientFrameStats> stats);
+ void FrameRendered(uint32_t frame_id,
+ std::unique_ptr<ClientFrameStats> stats);
+
+ std::string label_;
scoped_refptr<webrtc::MediaStreamInterface> media_stream_;
VideoRenderer* video_renderer_;
+
+ std::unique_ptr<ClientVideoStatsDispatcher> video_stats_dispatcher_;
+
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ std::list<std::pair<uint32_t, ClientFrameStats>> client_stats_queue_;
+ std::list<std::pair<uint32_t, HostFrameStats>> host_stats_queue_;
+
base::WeakPtrFactory<WebrtcVideoRendererAdapter> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(WebrtcVideoRendererAdapter);

Powered by Google App Engine
This is Rietveld 408576698