Chromium Code Reviews| Index: webrtc/modules/include/module_common_types.h |
| diff --git a/webrtc/modules/include/module_common_types.h b/webrtc/modules/include/module_common_types.h |
| index a3ac2bbc56adb2cd13960d71431eb06fd82b4c96..b4305b79ef470702f35fc8909acc4a154d903309 100644 |
| --- a/webrtc/modules/include/module_common_types.h |
| +++ b/webrtc/modules/include/module_common_types.h |
| @@ -26,6 +26,7 @@ |
| #include "webrtc/rtc_base/constructormagic.h" |
| #include "webrtc/rtc_base/deprecation.h" |
| #include "webrtc/rtc_base/safe_conversions.h" |
| +#include "webrtc/rtc_base/timeutils.h" |
| #include "webrtc/typedefs.h" |
| namespace webrtc { |
| @@ -336,6 +337,16 @@ class AudioFrame { |
| void CopyFrom(const AudioFrame& src); |
| + // Sets a wall-time clock timestamp in milliseconds to be used for profiling |
| + // of time between two points in the audio chain. |
| + // Example: |
| + // t0: UpdateProfileTime() |
| + // t1: TimeSinceLastProfile() => t1 - t0 [msec] |
| + void UpdateProfileTime(); |
|
hlundin-webrtc
2017/09/14 13:34:33
Suggest UpdateProfileTimestamp to match variable n
henrika_webrtc
2017/09/15 13:33:57
Done.
|
| + // Returns the time difference between now and when UpdateProfileTime() was |
| + // last called. Returns -1 if UpdateProfileTime() has not yet been called. |
| + int64_t TimeSinceLastProfile() const; |
|
hlundin-webrtc
2017/09/14 13:34:34
Suggest ElapsedProfileTimeMs().
henrika_webrtc
2017/09/15 13:33:57
Done.
|
| + |
| // data() returns a zeroed static buffer if the frame is muted. |
| // mutable_frame() always returns a non-static buffer; the first call to |
| // mutable_frame() zeros the non-static buffer and marks the frame unmuted. |
| @@ -368,6 +379,12 @@ class AudioFrame { |
| size_t num_channels_ = 0; |
| SpeechType speech_type_ = kUndefined; |
| VADActivity vad_activity_ = kVadUnknown; |
| + // Monotonically increasing timestamp intended for profiling of audio frames. |
| + // Typically used for measuring elapsed time between two different points in |
| + // the audio path. No lock is used to save resources and we are thread safe |
| + // by design. Also, rtc::Optional is not used since it will cause a "complex |
|
hlundin-webrtc
2017/09/14 13:45:39
+kwiberg@, would you consider this reason enough t
henrika_webrtc
2017/09/15 13:33:57
IMHO, adding a cc-file for this functionality only
kwiberg-webrtc
2017/09/15 17:52:29
If build targets are set up properly (as they shou
|
| + // class/struct needs an explicit out-of-line destructor" build error. |
| + int64_t profile_time_stamp_ms_ = 0; |
|
hlundin-webrtc
2017/09/14 13:34:33
The convention in this file is to write timestamp
henrika_webrtc
2017/09/15 13:33:57
Done.
|
| private: |
| // A permamently zeroed out buffer to represent muted frames. This is a |
| @@ -407,6 +424,7 @@ inline void AudioFrame::ResetWithoutMuting() { |
| num_channels_ = 0; |
| speech_type_ = kUndefined; |
| vad_activity_ = kVadUnknown; |
| + profile_time_stamp_ms_ = 0; |
| } |
| inline void AudioFrame::UpdateFrame(int id, |
| @@ -457,6 +475,20 @@ inline void AudioFrame::CopyFrom(const AudioFrame& src) { |
| } |
| } |
| +inline void AudioFrame::UpdateProfileTime() { |
| + { |
|
hlundin-webrtc
2017/09/14 13:34:33
Why the extra braces?
henrika_webrtc
2017/09/15 13:33:57
My bad
|
| + profile_time_stamp_ms_ = rtc::TimeMillis() ; |
|
hlundin-webrtc
2017/09/14 13:34:33
Delete space before ;
henrika_webrtc
2017/09/15 13:33:57
Done.
|
| + } |
| +} |
| + |
| +inline int64_t AudioFrame::TimeSinceLastProfile() const { |
| + if (profile_time_stamp_ms_ == 0) { |
| + // Profiling has not been activated. |
| + return -1; |
| + } |
| + return rtc::TimeSince(profile_time_stamp_ms_); |
| +} |
| + |
| inline const int16_t* AudioFrame::data() const { |
| return muted_ ? empty_data() : data_; |
| } |