Split IceCandidatePairEventType enum.

Disjoint subsets of the enum values are used for Ice candidate config
events and Ice candidate check events. This CL breaks out the config
part to a separate enum and by extension changes the icelogger interface
for config events.

Bug: webrtc:9336, webrtc:8111
Change-Id: I405b5c3981905c3c504b45afdddb3649469ed141
Reviewed-on: https://webrtc-review.googlesource.com/79943
Reviewed-by: Qingsi Wang <qingsi@webrtc.org>
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23464}
This commit is contained in:
Bjorn Terelius
2018-05-30 17:14:08 +02:00
committed by Commit Bot
parent f0b83c5e87
commit 59b4e3ea8c
14 changed files with 69 additions and 73 deletions

View File

@ -107,18 +107,16 @@ rtclog::VideoReceiveConfig_RtcpMode ConvertRtcpMode(RtcpMode rtcp_mode) {
} }
rtclog::IceCandidatePairConfig::IceCandidatePairConfigType rtclog::IceCandidatePairConfig::IceCandidatePairConfigType
ConvertIceCandidatePairConfigType(IceCandidatePairEventType type) { ConvertIceCandidatePairConfigType(IceCandidatePairConfigType type) {
switch (type) { switch (type) {
case IceCandidatePairEventType::kAdded: case IceCandidatePairConfigType::kAdded:
return rtclog::IceCandidatePairConfig::ADDED; return rtclog::IceCandidatePairConfig::ADDED;
case IceCandidatePairEventType::kUpdated: case IceCandidatePairConfigType::kUpdated:
return rtclog::IceCandidatePairConfig::UPDATED; return rtclog::IceCandidatePairConfig::UPDATED;
case IceCandidatePairEventType::kDestroyed: case IceCandidatePairConfigType::kDestroyed:
return rtclog::IceCandidatePairConfig::DESTROYED; return rtclog::IceCandidatePairConfig::DESTROYED;
case IceCandidatePairEventType::kSelected: case IceCandidatePairConfigType::kSelected:
return rtclog::IceCandidatePairConfig::SELECTED; return rtclog::IceCandidatePairConfig::SELECTED;
default:
RTC_NOTREACHED();
} }
RTC_NOTREACHED(); RTC_NOTREACHED();
return rtclog::IceCandidatePairConfig::ADDED; return rtclog::IceCandidatePairConfig::ADDED;
@ -137,8 +135,6 @@ rtclog::IceCandidatePairConfig::IceCandidateType ConvertIceCandidateType(
return rtclog::IceCandidatePairConfig::RELAY; return rtclog::IceCandidatePairConfig::RELAY;
case IceCandidateType::kUnknown: case IceCandidateType::kUnknown:
return rtclog::IceCandidatePairConfig::UNKNOWN_CANDIDATE_TYPE; return rtclog::IceCandidatePairConfig::UNKNOWN_CANDIDATE_TYPE;
default:
RTC_NOTREACHED();
} }
RTC_NOTREACHED(); RTC_NOTREACHED();
return rtclog::IceCandidatePairConfig::UNKNOWN_CANDIDATE_TYPE; return rtclog::IceCandidatePairConfig::UNKNOWN_CANDIDATE_TYPE;
@ -157,8 +153,6 @@ rtclog::IceCandidatePairConfig::Protocol ConvertIceCandidatePairProtocol(
return rtclog::IceCandidatePairConfig::TLS; return rtclog::IceCandidatePairConfig::TLS;
case IceCandidatePairProtocol::kUnknown: case IceCandidatePairProtocol::kUnknown:
return rtclog::IceCandidatePairConfig::UNKNOWN_PROTOCOL; return rtclog::IceCandidatePairConfig::UNKNOWN_PROTOCOL;
default:
RTC_NOTREACHED();
} }
RTC_NOTREACHED(); RTC_NOTREACHED();
return rtclog::IceCandidatePairConfig::UNKNOWN_PROTOCOL; return rtclog::IceCandidatePairConfig::UNKNOWN_PROTOCOL;
@ -174,8 +168,6 @@ ConvertIceCandidatePairAddressFamily(
return rtclog::IceCandidatePairConfig::IPV6; return rtclog::IceCandidatePairConfig::IPV6;
case IceCandidatePairAddressFamily::kUnknown: case IceCandidatePairAddressFamily::kUnknown:
return rtclog::IceCandidatePairConfig::UNKNOWN_ADDRESS_FAMILY; return rtclog::IceCandidatePairConfig::UNKNOWN_ADDRESS_FAMILY;
default:
RTC_NOTREACHED();
} }
RTC_NOTREACHED(); RTC_NOTREACHED();
return rtclog::IceCandidatePairConfig::UNKNOWN_ADDRESS_FAMILY; return rtclog::IceCandidatePairConfig::UNKNOWN_ADDRESS_FAMILY;
@ -196,8 +188,6 @@ rtclog::IceCandidatePairConfig::NetworkType ConvertIceCandidateNetworkType(
return rtclog::IceCandidatePairConfig::CELLULAR; return rtclog::IceCandidatePairConfig::CELLULAR;
case IceCandidateNetworkType::kUnknown: case IceCandidateNetworkType::kUnknown:
return rtclog::IceCandidatePairConfig::UNKNOWN_NETWORK_TYPE; return rtclog::IceCandidatePairConfig::UNKNOWN_NETWORK_TYPE;
default:
RTC_NOTREACHED();
} }
RTC_NOTREACHED(); RTC_NOTREACHED();
return rtclog::IceCandidatePairConfig::UNKNOWN_NETWORK_TYPE; return rtclog::IceCandidatePairConfig::UNKNOWN_NETWORK_TYPE;
@ -214,8 +204,6 @@ ConvertIceCandidatePairEventType(IceCandidatePairEventType type) {
return rtclog::IceCandidatePairEvent::CHECK_RESPONSE_SENT; return rtclog::IceCandidatePairEvent::CHECK_RESPONSE_SENT;
case IceCandidatePairEventType::kCheckResponseReceived: case IceCandidatePairEventType::kCheckResponseReceived:
return rtclog::IceCandidatePairEvent::CHECK_RESPONSE_RECEIVED; return rtclog::IceCandidatePairEvent::CHECK_RESPONSE_RECEIVED;
default:
RTC_NOTREACHED();
} }
RTC_NOTREACHED(); RTC_NOTREACHED();
return rtclog::IceCandidatePairEvent::CHECK_SENT; return rtclog::IceCandidatePairEvent::CHECK_SENT;

View File

@ -18,13 +18,6 @@
namespace webrtc { namespace webrtc {
enum class IceCandidatePairEventType { 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, kCheckSent,
kCheckReceived, kCheckReceived,
kCheckResponseSent, kCheckResponseSent,

View File

@ -36,7 +36,7 @@ IceCandidatePairDescription::IceCandidatePairDescription(
IceCandidatePairDescription::~IceCandidatePairDescription() {} IceCandidatePairDescription::~IceCandidatePairDescription() {}
RtcEventIceCandidatePairConfig::RtcEventIceCandidatePairConfig( RtcEventIceCandidatePairConfig::RtcEventIceCandidatePairConfig(
IceCandidatePairEventType type, IceCandidatePairConfigType type,
uint32_t candidate_pair_id, uint32_t candidate_pair_id,
const IceCandidatePairDescription& candidate_pair_desc) const IceCandidatePairDescription& candidate_pair_desc)
: type_(type), : type_(type),

View File

@ -13,12 +13,17 @@
#include "logging/rtc_event_log/events/rtc_event.h" #include "logging/rtc_event_log/events/rtc_event.h"
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h"
#include <string> #include <string>
namespace webrtc { namespace webrtc {
enum class IceCandidatePairConfigType {
kAdded,
kUpdated,
kDestroyed,
kSelected,
};
// TODO(qingsi): Change the names of candidate types to "host", "srflx", "prflx" // TODO(qingsi): Change the names of candidate types to "host", "srflx", "prflx"
// and "relay" after the naming is spec-compliant in the signaling part // and "relay" after the naming is spec-compliant in the signaling part
enum class IceCandidateType { enum class IceCandidateType {
@ -72,7 +77,7 @@ class IceCandidatePairDescription {
class RtcEventIceCandidatePairConfig final : public RtcEvent { class RtcEventIceCandidatePairConfig final : public RtcEvent {
public: public:
RtcEventIceCandidatePairConfig( RtcEventIceCandidatePairConfig(
IceCandidatePairEventType type, IceCandidatePairConfigType type,
uint32_t candidate_pair_id, uint32_t candidate_pair_id,
const IceCandidatePairDescription& candidate_pair_desc); const IceCandidatePairDescription& candidate_pair_desc);
@ -82,7 +87,7 @@ class RtcEventIceCandidatePairConfig final : public RtcEvent {
bool IsConfigEvent() const override; bool IsConfigEvent() const override;
const IceCandidatePairEventType type_; const IceCandidatePairConfigType type_;
const uint32_t candidate_pair_id_; const uint32_t candidate_pair_id_;
const IceCandidatePairDescription candidate_pair_desc_; const IceCandidatePairDescription candidate_pair_desc_;
}; };

View File

@ -18,25 +18,21 @@ namespace webrtc {
IceEventLog::IceEventLog() {} IceEventLog::IceEventLog() {}
IceEventLog::~IceEventLog() {} IceEventLog::~IceEventLog() {}
bool IceEventLog::IsIceCandidatePairConfigEvent( void IceEventLog::LogCandidatePairConfig(
IceCandidatePairEventType type) { IceCandidatePairConfigType type,
return (type == IceCandidatePairEventType::kAdded) ||
(type == IceCandidatePairEventType::kUpdated) ||
(type == IceCandidatePairEventType::kDestroyed) ||
(type == IceCandidatePairEventType::kSelected);
}
void IceEventLog::LogCandidatePairEvent(
IceCandidatePairEventType type,
uint32_t candidate_pair_id, uint32_t candidate_pair_id,
const IceCandidatePairDescription& candidate_pair_desc) { const IceCandidatePairDescription& candidate_pair_desc) {
if (event_log_ == nullptr) { if (event_log_ == nullptr) {
return; return;
} }
if (IsIceCandidatePairConfigEvent(type)) {
candidate_pair_desc_by_id_[candidate_pair_id] = candidate_pair_desc; candidate_pair_desc_by_id_[candidate_pair_id] = candidate_pair_desc;
event_log_->Log(rtc::MakeUnique<RtcEventIceCandidatePairConfig>( event_log_->Log(rtc::MakeUnique<RtcEventIceCandidatePairConfig>(
type, candidate_pair_id, candidate_pair_desc)); type, candidate_pair_id, candidate_pair_desc));
}
void IceEventLog::LogCandidatePairEvent(IceCandidatePairEventType type,
uint32_t candidate_pair_id) {
if (event_log_ == nullptr) {
return; return;
} }
event_log_->Log( event_log_->Log(
@ -46,7 +42,7 @@ void IceEventLog::LogCandidatePairEvent(
void IceEventLog::DumpCandidatePairDescriptionToMemoryAsConfigEvents() const { void IceEventLog::DumpCandidatePairDescriptionToMemoryAsConfigEvents() const {
for (const auto& desc_id_pair : candidate_pair_desc_by_id_) { for (const auto& desc_id_pair : candidate_pair_desc_by_id_) {
event_log_->Log(rtc::MakeUnique<RtcEventIceCandidatePairConfig>( event_log_->Log(rtc::MakeUnique<RtcEventIceCandidatePairConfig>(
IceCandidatePairEventType::kUpdated, desc_id_pair.first, IceCandidatePairConfigType::kUpdated, desc_id_pair.first,
desc_id_pair.second)); desc_id_pair.second));
} }
} }

View File

@ -27,11 +27,17 @@ class IceEventLog {
public: public:
IceEventLog(); IceEventLog();
~IceEventLog(); ~IceEventLog();
void set_event_log(RtcEventLog* event_log) { event_log_ = event_log; } void set_event_log(RtcEventLog* event_log) { event_log_ = event_log; }
void LogCandidatePairEvent(
IceCandidatePairEventType type, void LogCandidatePairConfig(
IceCandidatePairConfigType type,
uint32_t candidate_pair_id, uint32_t candidate_pair_id,
const IceCandidatePairDescription& candidate_pair_desc); const IceCandidatePairDescription& candidate_pair_desc);
void LogCandidatePairEvent(IceCandidatePairEventType type,
uint32_t candidate_pair_id);
// This method constructs a config event for each candidate pair with their // This method constructs a config event for each candidate pair with their
// description and logs these config events. It is intended to be called when // description and logs these config events. It is intended to be called when
// logging starts to ensure that we have at least one config for each // logging starts to ensure that we have at least one config for each
@ -39,8 +45,6 @@ class IceEventLog {
void DumpCandidatePairDescriptionToMemoryAsConfigEvents() const; void DumpCandidatePairDescriptionToMemoryAsConfigEvents() const;
private: private:
bool IsIceCandidatePairConfigEvent(IceCandidatePairEventType type);
RtcEventLog* event_log_ = nullptr; RtcEventLog* event_log_ = nullptr;
std::unordered_map<uint32_t, IceCandidatePairDescription> std::unordered_map<uint32_t, IceCandidatePairDescription>
candidate_pair_desc_by_id_; candidate_pair_desc_by_id_;

View File

@ -98,20 +98,20 @@ BandwidthUsage GetRuntimeDetectorState(
return BandwidthUsage::kBwNormal; return BandwidthUsage::kBwNormal;
} }
IceCandidatePairEventType GetRuntimeIceCandidatePairConfigType( IceCandidatePairConfigType GetRuntimeIceCandidatePairConfigType(
rtclog::IceCandidatePairConfig::IceCandidatePairConfigType type) { rtclog::IceCandidatePairConfig::IceCandidatePairConfigType type) {
switch (type) { switch (type) {
case rtclog::IceCandidatePairConfig::ADDED: case rtclog::IceCandidatePairConfig::ADDED:
return IceCandidatePairEventType::kAdded; return IceCandidatePairConfigType::kAdded;
case rtclog::IceCandidatePairConfig::UPDATED: case rtclog::IceCandidatePairConfig::UPDATED:
return IceCandidatePairEventType::kUpdated; return IceCandidatePairConfigType::kUpdated;
case rtclog::IceCandidatePairConfig::DESTROYED: case rtclog::IceCandidatePairConfig::DESTROYED:
return IceCandidatePairEventType::kDestroyed; return IceCandidatePairConfigType::kDestroyed;
case rtclog::IceCandidatePairConfig::SELECTED: case rtclog::IceCandidatePairConfig::SELECTED:
return IceCandidatePairEventType::kSelected; return IceCandidatePairConfigType::kSelected;
} }
RTC_NOTREACHED(); RTC_NOTREACHED();
return IceCandidatePairEventType::kAdded; return IceCandidatePairConfigType::kAdded;
} }
IceCandidateType GetRuntimeIceCandidateType( IceCandidateType GetRuntimeIceCandidateType(

View File

@ -74,7 +74,7 @@ class ParsedRtcEventLog {
struct IceCandidatePairConfig { struct IceCandidatePairConfig {
uint64_t timestamp; uint64_t timestamp;
IceCandidatePairEventType type; IceCandidatePairConfigType type;
uint32_t candidate_pair_id; uint32_t candidate_pair_id;
IceCandidateType local_candidate_type; IceCandidateType local_candidate_type;
IceCandidatePairProtocol local_relay_protocol; IceCandidatePairProtocol local_relay_protocol;

View File

@ -108,20 +108,20 @@ BandwidthUsage GetRuntimeDetectorState(
return BandwidthUsage::kBwNormal; return BandwidthUsage::kBwNormal;
} }
IceCandidatePairEventType GetRuntimeIceCandidatePairConfigType( IceCandidatePairConfigType GetRuntimeIceCandidatePairConfigType(
rtclog::IceCandidatePairConfig::IceCandidatePairConfigType type) { rtclog::IceCandidatePairConfig::IceCandidatePairConfigType type) {
switch (type) { switch (type) {
case rtclog::IceCandidatePairConfig::ADDED: case rtclog::IceCandidatePairConfig::ADDED:
return IceCandidatePairEventType::kAdded; return IceCandidatePairConfigType::kAdded;
case rtclog::IceCandidatePairConfig::UPDATED: case rtclog::IceCandidatePairConfig::UPDATED:
return IceCandidatePairEventType::kUpdated; return IceCandidatePairConfigType::kUpdated;
case rtclog::IceCandidatePairConfig::DESTROYED: case rtclog::IceCandidatePairConfig::DESTROYED:
return IceCandidatePairEventType::kDestroyed; return IceCandidatePairConfigType::kDestroyed;
case rtclog::IceCandidatePairConfig::SELECTED: case rtclog::IceCandidatePairConfig::SELECTED:
return IceCandidatePairEventType::kSelected; return IceCandidatePairConfigType::kSelected;
} }
RTC_NOTREACHED(); RTC_NOTREACHED();
return IceCandidatePairEventType::kAdded; return IceCandidatePairConfigType::kAdded;
} }
IceCandidateType GetRuntimeIceCandidateType( IceCandidateType GetRuntimeIceCandidateType(

View File

@ -114,7 +114,7 @@ struct LoggedBweProbeFailureEvent {
struct LoggedIceCandidatePairConfig { struct LoggedIceCandidatePairConfig {
int64_t timestamp_us; int64_t timestamp_us;
IceCandidatePairEventType type; IceCandidatePairConfigType type;
uint32_t candidate_pair_id; uint32_t candidate_pair_id;
IceCandidateType local_candidate_type; IceCandidateType local_candidate_type;
IceCandidatePairProtocol local_relay_protocol; IceCandidatePairProtocol local_relay_protocol;

View File

@ -191,7 +191,8 @@ void P2PTransportChannel::AddConnection(Connection* connection) {
had_connection_ = true; had_connection_ = true;
connection->set_ice_event_log(&ice_event_log_); connection->set_ice_event_log(&ice_event_log_);
LogCandidatePairEvent(connection, webrtc::IceCandidatePairEventType::kAdded); LogCandidatePairConfig(connection,
webrtc::IceCandidatePairConfigType::kAdded);
} }
// Determines whether we should switch the selected connection to // Determines whether we should switch the selected connection to
@ -1658,7 +1659,7 @@ void P2PTransportChannel::SwitchSelectedConnection(Connection* conn) {
// destroyed, so don't use it. // destroyed, so don't use it.
Connection* old_selected_connection = selected_connection_; Connection* old_selected_connection = selected_connection_;
selected_connection_ = conn; selected_connection_ = conn;
LogCandidatePairEvent(conn, webrtc::IceCandidatePairEventType::kSelected); LogCandidatePairConfig(conn, webrtc::IceCandidatePairConfigType::kSelected);
network_route_.reset(); network_route_.reset();
if (old_selected_connection) { if (old_selected_connection) {
old_selected_connection->set_selected(false); old_selected_connection->set_selected(false);
@ -2368,14 +2369,14 @@ int P2PTransportChannel::SampleRegatherAllNetworksInterval() {
return rand_.Rand(interval->min(), interval->max()); return rand_.Rand(interval->min(), interval->max());
} }
void P2PTransportChannel::LogCandidatePairEvent( void P2PTransportChannel::LogCandidatePairConfig(
Connection* conn, Connection* conn,
webrtc::IceCandidatePairEventType type) { webrtc::IceCandidatePairConfigType type) {
if (conn == nullptr) { if (conn == nullptr) {
return; return;
} }
auto candidate_pair_id = conn->hash(); auto candidate_pair_id = conn->hash();
ice_event_log_.LogCandidatePairEvent(type, candidate_pair_id, ice_event_log_.LogCandidatePairConfig(type, candidate_pair_id,
conn->ToLogDescription()); conn->ToLogDescription());
} }

View File

@ -292,8 +292,8 @@ class P2PTransportChannel : public IceTransportInternal {
void RegatherOnFailedNetworks(); void RegatherOnFailedNetworks();
void RegatherOnAllNetworks(); void RegatherOnAllNetworks();
void LogCandidatePairEvent(Connection* conn, void LogCandidatePairConfig(Connection* conn,
webrtc::IceCandidatePairEventType type); webrtc::IceCandidatePairConfigType type);
uint32_t GetNominationAttr(Connection* conn) const; uint32_t GetNominationAttr(Connection* conn) const;
bool GetUseCandidateAttr(Connection* conn, NominationMode mode) const; bool GetUseCandidateAttr(Connection* conn, NominationMode mode) const;

View File

@ -1370,7 +1370,7 @@ void Connection::Destroy() {
RTC_LOG(LS_VERBOSE) << ToString() RTC_LOG(LS_VERBOSE) << ToString()
<< ": Connection destroyed"; << ": Connection destroyed";
port_->thread()->Post(RTC_FROM_HERE, this, MSG_DELETE); port_->thread()->Post(RTC_FROM_HERE, this, MSG_DELETE);
LogCandidatePairEvent(webrtc::IceCandidatePairEventType::kDestroyed); LogCandidatePairConfig(webrtc::IceCandidatePairConfigType::kDestroyed);
} }
void Connection::FailAndDestroy() { void Connection::FailAndDestroy() {
@ -1460,7 +1460,7 @@ void Connection::UpdateState(int64_t now) {
void Connection::Ping(int64_t now) { void Connection::Ping(int64_t now) {
last_ping_sent_ = now; last_ping_sent_ = now;
ConnectionRequest *req = new ConnectionRequest(this); ConnectionRequest* req = new ConnectionRequest(this);
// If not using renomination, we use "1" to mean "nominated" and "0" to mean // If not using renomination, we use "1" to mean "nominated" and "0" to mean
// "not nominated". If using renomination, values greater than 1 are used for // "not nominated". If using renomination, values greater than 1 are used for
// re-nominated pairs. // re-nominated pairs.
@ -1634,11 +1634,19 @@ const webrtc::IceCandidatePairDescription& Connection::ToLogDescription() {
return log_description_.value(); return log_description_.value();
} }
void Connection::LogCandidatePairConfig(
webrtc::IceCandidatePairConfigType type) {
if (ice_event_log_ == nullptr) {
return;
}
ice_event_log_->LogCandidatePairConfig(type, hash(), ToLogDescription());
}
void Connection::LogCandidatePairEvent(webrtc::IceCandidatePairEventType type) { void Connection::LogCandidatePairEvent(webrtc::IceCandidatePairEventType type) {
if (ice_event_log_ == nullptr) { if (ice_event_log_ == nullptr) {
return; return;
} }
ice_event_log_->LogCandidatePairEvent(type, hash(), ToLogDescription()); ice_event_log_->LogCandidatePairEvent(type, hash());
} }
void Connection::OnConnectionRequestResponse(ConnectionRequest* request, void Connection::OnConnectionRequestResponse(ConnectionRequest* request,

View File

@ -768,6 +768,7 @@ class Connection : public CandidatePairInterface,
void MaybeUpdateLocalCandidate(ConnectionRequest* request, void MaybeUpdateLocalCandidate(ConnectionRequest* request,
StunMessage* response); StunMessage* response);
void LogCandidatePairConfig(webrtc::IceCandidatePairConfigType type);
void LogCandidatePairEvent(webrtc::IceCandidatePairEventType type); void LogCandidatePairEvent(webrtc::IceCandidatePairEventType type);
WriteState write_state_; WriteState write_state_;