| Index: voice_engine/channel.cc | 
| diff --git a/voice_engine/channel.cc b/voice_engine/channel.cc | 
| index 43088b696af4e454bf691f30e1f460603f9f4990..5fa7973b497f324bd94e0c85e6a45f65ece58ff6 100644 | 
| --- a/voice_engine/channel.cc | 
| +++ b/voice_engine/channel.cc | 
| @@ -40,7 +40,6 @@ | 
| #include "system_wrappers/include/field_trial.h" | 
| #include "system_wrappers/include/metrics.h" | 
| #include "system_wrappers/include/trace.h" | 
| -#include "voice_engine/statistics.h" | 
| #include "voice_engine/utility.h" | 
|  | 
| namespace webrtc { | 
| @@ -447,9 +446,8 @@ int32_t Channel::SendData(FrameType frameType, | 
| // received from the capture device as | 
| // undefined for voice for now. | 
| -1, payloadData, payloadSize, fragmentation, nullptr, nullptr)) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_RTP_RTCP_MODULE_ERROR, kTraceWarning, | 
| -        "Channel::SendData() failed to send data to RTP/RTCP module"); | 
| +    LOG(LS_ERROR) << | 
| +        "Channel::SendData() failed to send data to RTP/RTCP module"; | 
| return -1; | 
| } | 
|  | 
| @@ -475,11 +473,7 @@ bool Channel::SendRtp(const uint8_t* data, | 
| size_t bufferLength = len; | 
|  | 
| if (!_transportPtr->SendRtp(bufferToSendPtr, bufferLength, options)) { | 
| -    std::string transport_name = | 
| -        _externalTransport ? "external transport" : "WebRtc sockets"; | 
| -    WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, _channelId), | 
| -                 "Channel::SendPacket() RTP transmission using %s failed", | 
| -                 transport_name.c_str()); | 
| +    LOG(LS_ERROR) << "Channel::SendPacket() RTP transmission failed"; | 
| return false; | 
| } | 
| return true; | 
| @@ -502,11 +496,7 @@ bool Channel::SendRtcp(const uint8_t* data, size_t len) { | 
|  | 
| int n = _transportPtr->SendRtcp(bufferToSendPtr, bufferLength); | 
| if (n < 0) { | 
| -    std::string transport_name = | 
| -        _externalTransport ? "external transport" : "WebRtc sockets"; | 
| -    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 
| -                 "Channel::SendRtcp() transmission using %s failed", | 
| -                 transport_name.c_str()); | 
| +    LOG(LS_ERROR) << "Channel::SendRtcp() transmission failed"; | 
| return false; | 
| } | 
| return true; | 
| @@ -556,7 +546,6 @@ int32_t Channel::OnInitializeDecoder( | 
| "Channel::OnInitializeDecoder() invalid codec (" | 
| "pt=%d, name=%s) received - 1", | 
| payloadType, payloadName); | 
| -    _engineStatisticsPtr->SetLastError(VE_AUDIO_CODING_MODULE_ERROR); | 
| return -1; | 
| } | 
|  | 
| @@ -585,9 +574,8 @@ int32_t Channel::OnReceivedPayloadData(const uint8_t* payloadData, | 
| // Push the incoming payload (parsed and ready for decoding) into the ACM | 
| if (audio_coding_->IncomingPacket(payloadData, payloadSize, *rtpHeader) != | 
| 0) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_AUDIO_CODING_MODULE_ERROR, kTraceWarning, | 
| -        "Channel::OnReceivedPayloadData() unable to push data to the ACM"); | 
| +    LOG(LS_ERROR) << | 
| +        "Channel::OnReceivedPayloadData() unable to push data to the ACM"; | 
| return -1; | 
| } | 
|  | 
| @@ -759,7 +747,6 @@ Channel::Channel(int32_t channelId, | 
| rtp_payload_registry_.get())), | 
| telephone_event_handler_(rtp_receiver_->GetTelephoneEventHandler()), | 
| _outputAudioLevel(), | 
| -      _externalTransport(false), | 
| _timeStamp(0),  // This is just an offset, RTP module will add it's own | 
| // random offset | 
| ntp_estimator_(Clock::GetRealTimeClock()), | 
| @@ -769,10 +756,8 @@ Channel::Channel(int32_t channelId, | 
| rtp_ts_wraparound_handler_(new rtc::TimestampWrapAroundHandler()), | 
| capture_start_rtp_time_stamp_(-1), | 
| capture_start_ntp_time_ms_(-1), | 
| -      _engineStatisticsPtr(NULL), | 
| _moduleProcessThreadPtr(NULL), | 
| _audioDeviceModulePtr(NULL), | 
| -      _callbackCritSectPtr(NULL), | 
| _transportPtr(NULL), | 
| input_mute_(false), | 
| previous_frame_muted_(false), | 
| @@ -835,7 +820,7 @@ int32_t Channel::Init() { | 
|  | 
| // --- Initial sanity | 
|  | 
| -  if ((_engineStatisticsPtr == NULL) || (_moduleProcessThreadPtr == NULL)) { | 
| +  if (_moduleProcessThreadPtr == NULL) { | 
| WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, _channelId), | 
| "Channel::Init() must call SetEngineInformation() first"); | 
| return -1; | 
| @@ -848,9 +833,7 @@ int32_t Channel::Init() { | 
| // --- ACM initialization | 
|  | 
| if (audio_coding_->InitializeReceiver() == -1) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_AUDIO_CODING_MODULE_ERROR, kTraceError, | 
| -        "Channel::Init() unable to initialize the ACM - 1"); | 
| +    LOG(LS_ERROR) << "Channel::Init() unable to initialize the ACM - 1"; | 
| return -1; | 
| } | 
|  | 
| @@ -866,9 +849,7 @@ int32_t Channel::Init() { | 
| _rtpRtcpModule->SetRTCPStatus(RtcpMode::kCompound); | 
| // --- Register all permanent callbacks | 
| if (audio_coding_->RegisterTransportCallback(this) == -1) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_CANNOT_INIT_CHANNEL, kTraceError, | 
| -        "Channel::Init() callbacks not registered"); | 
| +    LOG(LS_ERROR) << "Channel::Init() callbacks not registered"; | 
| return -1; | 
| } | 
|  | 
| @@ -903,19 +884,15 @@ void Channel::Terminate() { | 
| // End of modules shutdown | 
| } | 
|  | 
| -int32_t Channel::SetEngineInformation(Statistics& engineStatistics, | 
| -                                      ProcessThread& moduleProcessThread, | 
| +int32_t Channel::SetEngineInformation(ProcessThread& moduleProcessThread, | 
| AudioDeviceModule& audioDeviceModule, | 
| -                                      rtc::CriticalSection* callbackCritSect, | 
| rtc::TaskQueue* encoder_queue) { | 
| RTC_DCHECK(encoder_queue); | 
| RTC_DCHECK(!encoder_queue_); | 
| WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 
| "Channel::SetEngineInformation()"); | 
| -  _engineStatisticsPtr = &engineStatistics; | 
| _moduleProcessThreadPtr = &moduleProcessThread; | 
| _audioDeviceModulePtr = &audioDeviceModule; | 
| -  _callbackCritSectPtr = callbackCritSect; | 
| encoder_queue_ = encoder_queue; | 
| return 0; | 
| } | 
| @@ -974,9 +951,7 @@ int32_t Channel::StartSend() { | 
| } | 
| _rtpRtcpModule->SetSendingMediaStatus(true); | 
| if (_rtpRtcpModule->SetSendingStatus(true) != 0) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_RTP_RTCP_MODULE_ERROR, kTraceError, | 
| -        "StartSend() RTP/RTCP failed to start sending"); | 
| +    LOG(LS_ERROR) << "StartSend() RTP/RTCP failed to start sending"; | 
| _rtpRtcpModule->SetSendingMediaStatus(false); | 
| rtc::CritScope cs(&_callbackCritSect); | 
| channel_state_.SetSending(false); | 
| @@ -1023,9 +998,7 @@ void Channel::StopSend() { | 
| // Reset sending SSRC and sequence number and triggers direct transmission | 
| // of RTCP BYE | 
| if (_rtpRtcpModule->SetSendingStatus(false) == -1) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_RTP_RTCP_MODULE_ERROR, kTraceWarning, | 
| -        "StartSend() RTP/RTCP failed to stop sending"); | 
| +    LOG(LS_ERROR) << "StartSend() RTP/RTCP failed to stop sending"; | 
| } | 
| _rtpRtcpModule->SetSendingMediaStatus(false); | 
| } | 
| @@ -1198,39 +1171,9 @@ void Channel::SetReceiverFrameLengthRange(int min_frame_length_ms, | 
| }); | 
| } | 
|  | 
| -int32_t Channel::RegisterExternalTransport(Transport* transport) { | 
| -  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 
| -               "Channel::RegisterExternalTransport()"); | 
| - | 
| +void Channel::RegisterTransport(Transport* transport) { | 
| rtc::CritScope cs(&_callbackCritSect); | 
| -  if (_externalTransport) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_INVALID_OPERATION, kTraceError, | 
| -        "RegisterExternalTransport() external transport already enabled"); | 
| -    return -1; | 
| -  } | 
| -  _externalTransport = true; | 
| _transportPtr = transport; | 
| -  return 0; | 
| -} | 
| - | 
| -int32_t Channel::DeRegisterExternalTransport() { | 
| -  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 
| -               "Channel::DeRegisterExternalTransport()"); | 
| - | 
| -  rtc::CritScope cs(&_callbackCritSect); | 
| -  if (_transportPtr) { | 
| -    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 
| -                 "DeRegisterExternalTransport() all transport is disabled"); | 
| -  } else { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_INVALID_OPERATION, kTraceWarning, | 
| -        "DeRegisterExternalTransport() external transport already " | 
| -        "disabled"); | 
| -  } | 
| -  _externalTransport = false; | 
| -  _transportPtr = NULL; | 
| -  return 0; | 
| } | 
|  | 
| void Channel::OnRtpPacket(const RtpPacketReceived& packet) { | 
| @@ -1380,9 +1323,7 @@ int Channel::SendTelephoneEventOutband(int event, int duration_ms) { | 
| } | 
| if (_rtpRtcpModule->SendTelephoneEventOutband( | 
| event, duration_ms, kTelephoneEventAttenuationdB) != 0) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_SEND_DTMF_FAILED, kTraceWarning, | 
| -        "SendTelephoneEventOutband() failed to send event"); | 
| +    LOG(LS_ERROR) << "SendTelephoneEventOutband() failed to send event"; | 
| return -1; | 
| } | 
| return 0; | 
| @@ -1401,10 +1342,8 @@ int Channel::SetSendTelephoneEventPayloadType(int payload_type, | 
| if (_rtpRtcpModule->RegisterSendPayload(codec) != 0) { | 
| _rtpRtcpModule->DeRegisterSendPayload(codec.pltype); | 
| if (_rtpRtcpModule->RegisterSendPayload(codec) != 0) { | 
| -      _engineStatisticsPtr->SetLastError( | 
| -          VE_RTP_RTCP_MODULE_ERROR, kTraceError, | 
| -          "SetSendTelephoneEventPayloadType() failed to register send" | 
| -          "payload type"); | 
| +      LOG(LS_ERROR) << "SetSendTelephoneEventPayloadType() failed to register " | 
| +                       "send payload type"; | 
| return -1; | 
| } | 
| } | 
| @@ -1415,8 +1354,7 @@ int Channel::SetLocalSSRC(unsigned int ssrc) { | 
| WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 
| "Channel::SetLocalSSRC()"); | 
| if (channel_state_.Get().sending) { | 
| -    _engineStatisticsPtr->SetLastError(VE_ALREADY_SENDING, kTraceError, | 
| -                                       "SetLocalSSRC() already sending"); | 
| +    LOG(LS_ERROR) << "SetLocalSSRC() already sending"; | 
| return -1; | 
| } | 
| _rtpRtcpModule->SetSSRC(ssrc); | 
| @@ -1517,9 +1455,7 @@ int Channel::SetRTCP_CNAME(const char cName[256]) { | 
| WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 
| "Channel::SetRTCP_CNAME()"); | 
| if (_rtpRtcpModule->SetCNAME(cName) != 0) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_RTP_RTCP_MODULE_ERROR, kTraceError, | 
| -        "SetRTCP_CNAME() failed to set RTCP CNAME"); | 
| +    LOG(LS_ERROR) << "SetRTCP_CNAME() failed to set RTCP CNAME"; | 
| return -1; | 
| } | 
| return 0; | 
| @@ -1528,9 +1464,7 @@ int Channel::SetRTCP_CNAME(const char cName[256]) { | 
| int Channel::GetRemoteRTCPReportBlocks( | 
| std::vector<ReportBlock>* report_blocks) { | 
| if (report_blocks == NULL) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_INVALID_ARGUMENT, kTraceError, | 
| -        "GetRemoteRTCPReportBlock()s invalid report_blocks."); | 
| +    LOG(LS_ERROR) << "GetRemoteRTCPReportBlock()s invalid report_blocks."; | 
| return -1; | 
| } | 
|  | 
| @@ -1788,15 +1722,11 @@ int Channel::SetMinimumPlayoutDelay(int delayMs) { | 
| "Channel::SetMinimumPlayoutDelay()"); | 
| if ((delayMs < kVoiceEngineMinMinPlayoutDelayMs) || | 
| (delayMs > kVoiceEngineMaxMinPlayoutDelayMs)) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_INVALID_ARGUMENT, kTraceError, | 
| -        "SetMinimumPlayoutDelay() invalid min delay"); | 
| +    LOG(LS_ERROR) << "SetMinimumPlayoutDelay() invalid min delay"; | 
| return -1; | 
| } | 
| if (audio_coding_->SetMinimumPlayoutDelay(delayMs) != 0) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_AUDIO_CODING_MODULE_ERROR, kTraceError, | 
| -        "SetMinimumPlayoutDelay() failed to set min playout delay"); | 
| +    LOG(LS_ERROR) << "SetMinimumPlayoutDelay() failed to set min playout delay"; | 
| return -1; | 
| } | 
| return 0; | 
| @@ -1809,9 +1739,7 @@ int Channel::GetPlayoutTimestamp(unsigned int& timestamp) { | 
| playout_timestamp_rtp = playout_timestamp_rtp_; | 
| } | 
| if (playout_timestamp_rtp == 0) { | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_CANNOT_RETRIEVE_VALUE, kTraceStateInfo, | 
| -        "GetPlayoutTimestamp() failed to retrieve timestamp"); | 
| +    LOG(LS_ERROR) << "GetPlayoutTimestamp() failed to retrieve timestamp"; | 
| return -1; | 
| } | 
| timestamp = playout_timestamp_rtp; | 
| @@ -1839,9 +1767,6 @@ void Channel::UpdatePlayoutTimestamp(bool rtcp) { | 
| WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId), | 
| "Channel::UpdatePlayoutTimestamp() failed to read playout" | 
| " delay from the ADM"); | 
| -    _engineStatisticsPtr->SetLastError( | 
| -        VE_CANNOT_RETRIEVE_VALUE, kTraceError, | 
| -        "UpdatePlayoutTimestamp() failed to retrieve playout delay"); | 
| return; | 
| } | 
|  | 
|  |