| // 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 <utility> | 
 |  | 
 | #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<CompoundBuffer> message) { | 
 |   std::unique_ptr<FrameStatsMessage> stats_proto = | 
 |       ParseMessage<FrameStatsMessage>(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 |