From d9eec762ce8bdc90bd18a387cacae8cab90440f1 Mon Sep 17 00:00:00 2001 From: pbos Date: Tue, 17 Nov 2015 06:03:43 -0800 Subject: [PATCH] Trace encoding/decoding time in a generic way. Removes VP8::Encode trace in favor of VCMGenericEncoder ones and adds one to InitEncode. Also adds an instant event to ::Encoded since this can be done on a different thread. Also adds the corresponding traces to VCMGenericDecoder. BUG=webrtc:5167 R=stefan@webrtc.org Review URL: https://codereview.webrtc.org/1412573010 Cr-Commit-Position: refs/heads/master@{#10674} --- webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc | 2 -- .../video_coding/main/source/generic_decoder.cc | 10 +++++++--- .../video_coding/main/source/generic_encoder.cc | 7 +++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc index 4f4e435712..db8961744a 100644 --- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc +++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc @@ -716,8 +716,6 @@ uint32_t VP8EncoderImpl::MaxIntraTarget(uint32_t optimalBuffersize) { int VP8EncoderImpl::Encode(const VideoFrame& frame, const CodecSpecificInfo* codec_specific_info, const std::vector* frame_types) { - TRACE_EVENT1("webrtc", "VP8::Encode", "timestamp", frame.timestamp()); - if (!inited_) return WEBRTC_VIDEO_CODEC_UNINITIALIZED; if (frame.IsZeroSize()) diff --git a/webrtc/modules/video_coding/main/source/generic_decoder.cc b/webrtc/modules/video_coding/main/source/generic_decoder.cc index 7d0d7e03b8..790bf130a1 100644 --- a/webrtc/modules/video_coding/main/source/generic_decoder.cc +++ b/webrtc/modules/video_coding/main/source/generic_decoder.cc @@ -9,6 +9,7 @@ */ #include "webrtc/base/logging.h" +#include "webrtc/base/trace_event.h" #include "webrtc/modules/video_coding/main/interface/video_coding.h" #include "webrtc/modules/video_coding/main/source/generic_decoder.h" #include "webrtc/modules/video_coding/main/source/internal_defines.h" @@ -52,6 +53,8 @@ int32_t VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage) { int32_t VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage, int64_t decode_time_ms) { + TRACE_EVENT_INSTANT1("webrtc", "VCMDecodedFrameCallback::Decoded", + "timestamp", decodedImage.timestamp()); // TODO(holmer): We should improve this so that we can handle multiple // callbacks from one call to Decode(). VCMFrameInformation* frameInfo; @@ -147,14 +150,15 @@ VCMGenericDecoder::~VCMGenericDecoder() int32_t VCMGenericDecoder::InitDecode(const VideoCodec* settings, int32_t numberOfCores) { + TRACE_EVENT0("webrtc", "VCMGenericDecoder::InitDecode"); _codecType = settings->codecType; return _decoder.InitDecode(settings, numberOfCores); } -int32_t VCMGenericDecoder::Decode(const VCMEncodedFrame& frame, - int64_t nowMs) -{ +int32_t VCMGenericDecoder::Decode(const VCMEncodedFrame& frame, int64_t nowMs) { + TRACE_EVENT1("webrtc", "VCMGenericDecoder::Decode", "timestamp", + frame.EncodedImage()._timeStamp); _frameInfos[_nextFrameInfoIdx].decodeStartTimeMs = nowMs; _frameInfos[_nextFrameInfoIdx].renderTimeMs = frame.RenderTimeMs(); _frameInfos[_nextFrameInfoIdx].rotation = frame.rotation(); diff --git a/webrtc/modules/video_coding/main/source/generic_encoder.cc b/webrtc/modules/video_coding/main/source/generic_encoder.cc index b78cc8ef2f..c0acac5612 100644 --- a/webrtc/modules/video_coding/main/source/generic_encoder.cc +++ b/webrtc/modules/video_coding/main/source/generic_encoder.cc @@ -10,6 +10,7 @@ #include "webrtc/base/checks.h" #include "webrtc/base/logging.h" +#include "webrtc/base/trace_event.h" #include "webrtc/engine_configurations.h" #include "webrtc/modules/video_coding/main/source/encoded_frame.h" #include "webrtc/modules/video_coding/main/source/generic_encoder.h" @@ -112,6 +113,7 @@ int32_t VCMGenericEncoder::Release() { int32_t VCMGenericEncoder::InitEncode(const VideoCodec* settings, int32_t numberOfCores, size_t maxPayloadSize) { + TRACE_EVENT0("webrtc", "VCMGenericEncoder::InitEncode"); { rtc::CritScope lock(¶ms_lock_); encoder_params_.target_bitrate = settings->startBitrate * 1000; @@ -132,6 +134,9 @@ int32_t VCMGenericEncoder::InitEncode(const VideoCodec* settings, int32_t VCMGenericEncoder::Encode(const VideoFrame& inputFrame, const CodecSpecificInfo* codecSpecificInfo, const std::vector& frameTypes) { + TRACE_EVENT1("webrtc", "VCMGenericEncoder::Encode", "timestamp", + inputFrame.timestamp()); + for (FrameType frame_type : frameTypes) RTC_DCHECK(frame_type == kVideoFrameKey || frame_type == kVideoFrameDelta); @@ -253,6 +258,8 @@ int32_t VCMEncodedFrameCallback::Encoded( const EncodedImage& encodedImage, const CodecSpecificInfo* codecSpecificInfo, const RTPFragmentationHeader* fragmentationHeader) { + TRACE_EVENT_INSTANT1("webrtc", "VCMEncodedFrameCallback::Encoded", + "timestamp", encodedImage._timeStamp); RTC_DCHECK(encodedImage._frameType == kVideoFrameKey || encodedImage._frameType == kVideoFrameDelta); post_encode_callback_->Encoded(encodedImage, NULL, NULL);