// Copyright 2016 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. #include "remoting/protocol/client_video_stats_dispatcher.h" #include #include "base/bind.h" #include "base/callback_helpers.h" #include "net/socket/stream_socket.h" #include "remoting/base/compound_buffer.h" #include "remoting/proto/video_stats.pb.h" #include "remoting/protocol/frame_stats.h" #include "remoting/protocol/message_pipe.h" #include "remoting/protocol/message_serialization.h" #include "remoting/protocol/video_stats_stub.h" namespace remoting { namespace protocol { ClientVideoStatsDispatcher::ClientVideoStatsDispatcher( const std::string& stream_name, VideoStatsStub* video_stats_stub) : ChannelDispatcherBase(kVideoStatsChannelNamePrefix + stream_name), video_stats_stub_(video_stats_stub) {} ClientVideoStatsDispatcher::~ClientVideoStatsDispatcher() = default; void ClientVideoStatsDispatcher::OnIncomingMessage( std::unique_ptr message) { std::unique_ptr stats_proto = ParseMessage(message.get()); if (!stats_proto) return; if (!stats_proto->has_frame_id()) { LOG(ERROR) << "Received invalid FrameStatsMessage."; return; } video_stats_stub_->OnVideoFrameStats( stats_proto->frame_id(), HostFrameStats::FromFrameStatsMessage(*stats_proto)); } } // namespace protocol } // namespace remoting