blob: 12e76d80cd49042809b58096d0c52728218a7b0e [file] [log] [blame]
// 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