Structured ICE logging via RtcEventLog.

This change list contains the structured logging module for ICE using
the RtcEventLog infrastructure, and also extension to the log parser and
analyzer.

Bug: None
Change-Id: I6539cf282155c2cde4d3161c53500c0746671a02
Reviewed-on: https://webrtc-review.googlesource.com/34622
Commit-Queue: Qingsi Wang <qingsi@google.com>
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21816}
This commit is contained in:
Qingsi Wang
2018-01-30 16:54:15 -08:00
committed by Commit Bot
parent 3518e7bea4
commit eed5aa8904
19 changed files with 1128 additions and 43 deletions

View File

@ -37,6 +37,8 @@ class RtcEvent {
AudioSendStreamConfig,
BweUpdateDelayBased,
BweUpdateLossBased,
IceCandidatePairConfig,
IceCandidatePairEvent,
ProbeClusterCreated,
ProbeResultFailure,
ProbeResultSuccess,

View File

@ -0,0 +1,30 @@
/*
* Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h"
namespace webrtc {
RtcEventIceCandidatePair::RtcEventIceCandidatePair(
IceCandidatePairEventType type,
uint32_t candidate_pair_id)
: type_(type), candidate_pair_id_(candidate_pair_id) {}
RtcEventIceCandidatePair::~RtcEventIceCandidatePair() = default;
RtcEvent::Type RtcEventIceCandidatePair::GetType() const {
return RtcEvent::Type::IceCandidatePairEvent;
}
bool RtcEventIceCandidatePair::IsConfigEvent() const {
return false;
}
} // namespace webrtc

View File

@ -0,0 +1,51 @@
/*
* Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_ICE_CANDIDATE_PAIR_H_
#define LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_ICE_CANDIDATE_PAIR_H_
#include "logging/rtc_event_log/events/rtc_event.h"
#include <string>
namespace webrtc {
enum class IceCandidatePairEventType {
// Config event types for events related to the candiate pair creation and
// life-cycle management.
kAdded,
kUpdated,
kDestroyed,
kSelected,
// Non-config event types.
kCheckSent,
kCheckReceived,
kCheckResponseSent,
kCheckResponseReceived,
};
class RtcEventIceCandidatePair final : public RtcEvent {
public:
RtcEventIceCandidatePair(IceCandidatePairEventType type,
uint32_t candidate_pair_id);
~RtcEventIceCandidatePair() override;
Type GetType() const override;
bool IsConfigEvent() const override;
const IceCandidatePairEventType type_;
const uint32_t candidate_pair_id_;
};
} // namespace webrtc
#endif // LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_ICE_CANDIDATE_PAIR_H_

View File

@ -0,0 +1,58 @@
/*
* Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.h"
namespace webrtc {
IceCandidatePairDescription::IceCandidatePairDescription() {
local_candidate_type = IceCandidateType::kUnknown;
local_relay_protocol = IceCandidatePairProtocol::kUnknown;
local_network_type = IceCandidateNetworkType::kUnknown;
local_address_family = IceCandidatePairAddressFamily::kUnknown;
remote_candidate_type = IceCandidateType::kUnknown;
remote_address_family = IceCandidatePairAddressFamily::kUnknown;
candidate_pair_protocol = IceCandidatePairProtocol::kUnknown;
}
IceCandidatePairDescription::IceCandidatePairDescription(
const IceCandidatePairDescription& other) {
local_candidate_type = other.local_candidate_type;
local_relay_protocol = other.local_relay_protocol;
local_network_type = other.local_network_type;
local_address_family = other.local_address_family;
remote_candidate_type = other.remote_candidate_type;
remote_address_family = other.remote_address_family;
candidate_pair_protocol = other.candidate_pair_protocol;
}
IceCandidatePairDescription::~IceCandidatePairDescription() {}
RtcEventIceCandidatePairConfig::RtcEventIceCandidatePairConfig(
IceCandidatePairEventType type,
uint32_t candidate_pair_id,
const IceCandidatePairDescription& candidate_pair_desc)
: type_(type),
candidate_pair_id_(candidate_pair_id),
candidate_pair_desc_(candidate_pair_desc) {}
RtcEventIceCandidatePairConfig::~RtcEventIceCandidatePairConfig() = default;
RtcEvent::Type RtcEventIceCandidatePairConfig::GetType() const {
return RtcEvent::Type::IceCandidatePairConfig;
}
// The ICE candidate pair config event is not equivalent to a RtcEventLog config
// event.
bool RtcEventIceCandidatePairConfig::IsConfigEvent() const {
return false;
}
} // namespace webrtc

View File

@ -0,0 +1,92 @@
/*
* Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_ICE_CANDIDATE_PAIR_CONFIG_H_
#define LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_ICE_CANDIDATE_PAIR_CONFIG_H_
#include "logging/rtc_event_log/events/rtc_event.h"
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h"
#include <string>
namespace webrtc {
// TODO(qingsi): Change the names of candidate types to "host", "srflx", "prflx"
// and "relay" after the naming is spec-compliant in the signaling part
enum class IceCandidateType {
kLocal,
kStun,
kPrflx,
kRelay,
kUnknown,
};
enum class IceCandidatePairProtocol {
kUdp,
kTcp,
kSsltcp,
kTls,
kUnknown,
};
enum class IceCandidatePairAddressFamily {
kIpv4,
kIpv6,
kUnknown,
};
enum class IceCandidateNetworkType {
kEthernet,
kLoopback,
kWifi,
kVpn,
kCellular,
kUnknown,
};
class IceCandidatePairDescription {
public:
IceCandidatePairDescription();
explicit IceCandidatePairDescription(
const IceCandidatePairDescription& other);
~IceCandidatePairDescription();
IceCandidateType local_candidate_type;
IceCandidatePairProtocol local_relay_protocol;
IceCandidateNetworkType local_network_type;
IceCandidatePairAddressFamily local_address_family;
IceCandidateType remote_candidate_type;
IceCandidatePairAddressFamily remote_address_family;
IceCandidatePairProtocol candidate_pair_protocol;
};
class RtcEventIceCandidatePairConfig final : public RtcEvent {
public:
RtcEventIceCandidatePairConfig(
IceCandidatePairEventType type,
uint32_t candidate_pair_id,
const IceCandidatePairDescription& candidate_pair_desc);
~RtcEventIceCandidatePairConfig() override;
Type GetType() const override;
bool IsConfigEvent() const override;
const IceCandidatePairEventType type_;
const uint32_t candidate_pair_id_;
const IceCandidatePairDescription candidate_pair_desc_;
};
} // namespace webrtc
#endif // LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_ICE_CANDIDATE_PAIR_CONFIG_H_