blob: fbd83eab744ce1ce996e0e3647728da32da09579 [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 "base/time/time.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h"
namespace remoting {
class VideoPacket;
class FrameStatsMessage;
namespace protocol {
struct HostFrameStats {
HostFrameStats(const HostFrameStats&);
// Extracts timing fields from the |packet|.
static HostFrameStats GetForVideoPacket(const VideoPacket& packet);
// Converts FrameStatsMessage protobuf message to HostFrameStats.
static HostFrameStats FromFrameStatsMessage(const FrameStatsMessage& message);
void ToFrameStatsMessage(FrameStatsMessage* message_out) const;
// Frame Size.
int frame_size {};
// Set to null for frames that were not sent after a fresh input event.
base::TimeTicks latest_event_timestamp;
// Set to TimeDelta::Max() when unknown.
base::TimeDelta capture_delay = base::TimeDelta::Max();
base::TimeDelta encode_delay = base::TimeDelta::Max();
base::TimeDelta capture_pending_delay = base::TimeDelta::Max();
base::TimeDelta capture_overhead_delay = base::TimeDelta::Max();
base::TimeDelta encode_pending_delay = base::TimeDelta::Max();
base::TimeDelta send_pending_delay = base::TimeDelta::Max();
base::TimeDelta rtt_estimate = base::TimeDelta::Max();
int bandwidth_estimate_kbps = -1;
uint32_t capturer_id = webrtc::DesktopCapturerId::kUnknown;
int frame_quality = -1;
struct ClientFrameStats {
ClientFrameStats(const ClientFrameStats&);
ClientFrameStats& operator=(const ClientFrameStats&);
base::TimeTicks time_received;
base::TimeTicks time_decoded;
base::TimeTicks time_rendered;
struct FrameStats {
FrameStats(const FrameStats&);
HostFrameStats host_stats;
ClientFrameStats client_stats;
class FrameStatsConsumer {
virtual void OnVideoFrameStats(const FrameStats& stats) = 0;
virtual ~FrameStatsConsumer() {}
} // namespace protocol
} // namespace remoting