- Add histogram: "WebRTC.Video.RtpToNtpFreqOffsetInKhz"
The absolute value of the difference between the estimated frequency during RTP timestamp to NTP time conversion and the actual value (i.e. 90 kHz) is measured per received video frame. The max offset during 40 second intervals is stored. The average of these stored offsets per received video stream is recorded when a stream is removed.
Updated rtp_to_ntp.cc:
- Add validation for only inserting newer RTCP sender reports to the rtcp list.
- Move calculation of frequency/offset (from RTP/NTP timestamp pairs) to UpdateRtcpList. Calculated when a new RTCP SR in inserted (and not in RtpToNtpMs per packet).
BUG=webrtc:6579
Review-Url: https://codereview.webrtc.org/2385763002
Cr-Commit-Position: refs/heads/master@{#14891}
ClockTest.NtpTime was checking that the two methods for getting the
system time are returning a value that is within a fixed error margin
(100 ms) of each other. Unfortunately, even such a wide margin was
sometimes exceeded on heavily loaded machines
(https://build.chromium.org/p/client.webrtc/builders/Mac%20Asan/builds/9235/steps/system_wrappers_unittests/logs/stdio).
This CL changes the test to sandwich clock->CurrentNtp() between
clock->CurrentNtpTimeInMilliseconds(). This way the test will pass no
matter how much time elapses between the two method calls, as long as
the clock is monotonic.
Repeated test runs showed that there may be 1 ms worth of rounding error
between the two methods of getting time, so we have to allow that.
BUG=None.
Review-Url: https://codereview.webrtc.org/2393063002
Cr-Commit-Position: refs/heads/master@{#14520}
The capture time for a frame (capture_ms) is set later (in ViEEncoder::IncomingCapturedFrame) than the timestamp.
Could potentially cause the RTP timestamp in consecutive RTCP SR to decrease.
Example:
// Frame1 46371: timestamp:2732, capture_ms:46373, rtcp SR ms: 46423 -> estimated current RTP timestamp:2732+(46423-46373)*90 = 7232
// Frame2 46404: timestamp:5702, capture_ms:46412, rtcp SR ms: 46428 -> estimated current RTP timestamp:5702+(46428-46412)*90 = 7142
// Diff: 33 ms: 33 ms, 39 ms, 5 ms
BUG=b/31154867
Review-Url: https://codereview.webrtc.org/2354843003
Cr-Commit-Position: refs/heads/master@{#14454}
This name is only used for a DCHECK. Having it as a parameter leads to unnecessary string copying even on release builds.
This CL instead adds a GetHistogramName function that is only called on debug builds.
Checking if pointer is null is also moved outside HistogramAdd function. Having it there is confusing since Chromium implementation doesn't have it there.
BUG=webrtc:6329
Review-Url: https://codereview.webrtc.org/2337883003
Cr-Commit-Position: refs/heads/master@{#14263}
Only has counts stats right now but enumeration stats can easily be added in the future if needed.
BUG=webrtc:6313
Review-Url: https://codereview.webrtc.org/2320473002
Cr-Commit-Position: refs/heads/master@{#14146}
We have RTC_CHECK and RTC_DCHECK for C now, so we should use it. It's
one fewer difference between our C and C++ code.
NOPRESUBMIT=true
Review-Url: https://codereview.webrtc.org/2274083002
Cr-Commit-Position: refs/heads/master@{#13930}
This is a somewhat involved refactoring of this class. Here's an overview of the changes:
* FileWrapper can now be used as a regular class and instances allocated on the stack.
* The type now has support for move semantics and copy isn't allowed.
* New public ctor with FILE* that can be used instead of OpenFromFileHandle.
* New static Open() method. The intent of this is to allow opening a file and getting back a FileWrapper instance. Using this method instead of Create(), will allow us in the future to make the FILE* member pointer, to be const and simplify threading (get rid of the lock).
* Rename the Open() method to is_open() and make it inline.
* The FileWrapper interface is no longer a pure virtual interface. There's only one implementation so there's no need to go through a vtable for everything.
* Functionality offered by the class, is now reduced. No support for looping (not clear if that was actually useful to users of that flag), no need to implement the 'read_only_' functionality in the class, since file APIs implement that already, no support for *not* managing the file handle (this wasn't used). OpenFromFileHandle always "manages" the file.
* Delete the unused WriteText() method and don't support opening files in text mode. Text mode is only different on Windows and on Windows it translates \n to \r\n, which means that files such as log files, could have a slightly different format on Windows than other platforms. Besides, tools on Windows can handle UNIX line endings.
* Remove FileName(), change Trace code to manage its own path.
* Rename id_ member variable to file_.
* Removed the open_ member variable since the same functionality can be gotten from just checking the file pointer.
* Don't call CloseFile inside of Write. Write shouldn't be changing the state of the class beyond just attempting to write.
* Remove concept of looping from FileWrapper and never close inside of Read()
* Changed stream base classes to inherit from a common base class instead of both defining the Rewind method. Ultimately, Id' like to remove these interfaces and just have FileWrapper.
* Remove read_only param from OpenFromFileHandle
* Renamed size_in_bytes_ to position_, since it gets set to 0 when Rewind() is called (and the size actually does not change).
* Switch out rw lock for CriticalSection. The r/w lock was only used for reading when checking the open_ flag.
BUG=
Review-Url: https://codereview.webrtc.org/2054373002
Cr-Commit-Position: refs/heads/master@{#13155}
Compile fixes for GN on iOS that finally gets our bots green.
Changes to system_wrappers:
* Updated to only use inclusive sources for maintainability
* Add a few missing GN headers.
* Cleanup GYP hack for atomic32_mac.cc
* Renamed changes sources to avoid problems with GYP/GN file
suffix rules:
- atomic32_mac.cc -> atomic32_darwin.cc
- atomic32_posix.cc -> atomic32_non_darwin_unix.cc
See https://code.google.com/p/chromium/codesearch#chromium/src/build/config/BUILDCONFIG.gn&l=325
for details on which extensions can/cannot be used.
BUG=webrtc:5586
NOTRY=True
Review-Url: https://codereview.webrtc.org/1999723002
Cr-Commit-Position: refs/heads/master@{#12897}
Consider follow up and use actual bucket count when storing samples.
BUG=
Review-Url: https://codereview.webrtc.org/2008483002
Cr-Commit-Position: refs/heads/master@{#12872}
Updated tests to use the default implementation and removed the test implementation (webrtc/test/histograms.h).
BUG=
Review-Url: https://codereview.webrtc.org/1915523002
Cr-Commit-Position: refs/heads/master@{#12829}
Reason for revert:
Breaks user code. Said code needs to stop using scoped_ptr!
Original issue's description:
> Remove webrtc/base/scoped_ptr.h
>
> BUG=webrtc:5520
>
> NOTRY=True
>
> Committed: https://crrev.com/65fc62e9dd8a8716db625aaef76ab92f542ecc5a
> Cr-Commit-Position: refs/heads/master@{#12684}
TBR=tommi@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:5520
Review-Url: https://codereview.webrtc.org/1965063003
Cr-Commit-Position: refs/heads/master@{#12686}
But keep #including scoped_ptr.h in .h files, so as not to break
WebRTC users who expect those .h files to give them rtc::scoped_ptr.
BUG=webrtc:5520
Review-Url: https://codereview.webrtc.org/1937693002
Cr-Commit-Position: refs/heads/master@{#12581}
This propagated into various other places. Also had to #include headers that
were implicitly pulled by "scoped_ptr.h".
BUG=webrtc:5520
Review URL: https://codereview.webrtc.org/1920043002
Cr-Commit-Position: refs/heads/master@{#12501}
CalculateFrequency() results in zero frequency (floating point) if the RTP timestamps in the RTCP list are equal.
Added check in UpdateRtcpList to not insert RTCP SR with the same RTP timestamp.
BUG=webrtc:5780
Review URL: https://codereview.webrtc.org/1891703002
Cr-Commit-Position: refs/heads/master@{#12429}
We can (and should) use std::vector<std::unique_ptr<T>> instead.
Because it's standard, and because it's safer since callers have to
manually wrap elements in std::unique_ptr before inserting them and
manually unwrap them after inserting them.
Review URL: https://codereview.webrtc.org/1839603002
Cr-Commit-Position: refs/heads/master@{#12182}
The intended signalling from StartTimer() to Process() is that
created_at_.tv_sec is set to 0, and timer_event_->Set() is then called
in order to wake the process thread from timer_event_->Wait(). When this
happens the process thread will return early and the run Process()
again. This time it will pick up created_at_.tv_sec = 0 and run a new
Wait() call with the desired end time.
However if the process thread was NOT blocking on timer_event_->Wait()
when timer_event_->Set() was called from StartTimer() it will mean that
the first call to timer_event_->Wait() from Process(), AFTER the new
time has been configured (count_ = 1), will return early.
If the timer is not periodic it means that Set() will never be called,
and any calls will Wait() will block until the time out.
The solution is to always reset the event in timer_event_ on the first
call to timerEvent_->Wait(), after a timer has started.
Also some general cleanup.
BUG=
Review URL: https://codereview.webrtc.org/1812533002
Cr-Commit-Position: refs/heads/master@{#12082}
"WebRTC.Video.AVSyncOffsetInMs"
The absolute value of the sync offset between a rendered video frame and the latest played audio frame is measured per video frame. The average offset per received video stream is recorded when a stream is removed.
Updated sync tests in call_perf_tests.cc to use this implementation.
BUG=webrtc:5493
Review URL: https://codereview.webrtc.org/1756193005
Cr-Commit-Position: refs/heads/master@{#11993}
Real time clock may cause problems as they can move (even backwards) if
the clock is changed, eg updated by NTP.
Non-monotonic clocks still in use on some platform (I'm looking at you,
Apple) for timed waits, but that should be less of an issue than actual
timestamps.
BUG=webrtc:5452
Review URL: https://codereview.webrtc.org/1613013002
Cr-Commit-Position: refs/heads/master@{#11375}
While transitioning over to rtc::CriticalSection completely, this gives perf benefits that rtc::CriticalSection has on Mac to current users of CriticalSectionWrapper.
BUG=
Review URL: https://codereview.webrtc.org/1614373002
Cr-Commit-Position: refs/heads/master@{#11356}
There's no need for this class to have a vtable since there exists only a single implementation (per platform). It's also not good for performance.
BUG=
R=pbos@webrtc.org
Review URL: https://codereview.webrtc.org/1601743004 .
Cr-Commit-Position: refs/heads/master@{#11306}
Since this is on Windows only, I'm also using the CriticalSectionWrapper and ConditionVariableWrapper Windows types directly which allows us to skip 3 extra heap allocations. It also helps with the removal of the 'friend' relationship between ConditionVariableWrapper and CriticalSectionWrapper, which is causing headaches on Mac.
BUG=
Review URL: https://codereview.webrtc.org/1595983002
Cr-Commit-Position: refs/heads/master@{#11300}
This removes dependency on ConditionVariableWrapper and CriticalSectionWrapper which currently have a 'friend' relationship that I'd like to get rid of.
BUG=
Review URL: https://codereview.webrtc.org/1590983005
Cr-Commit-Position: refs/heads/master@{#11292}
There's no reason not to use std::move instead now that we can use the
C++11 standard library.
BUG=webrtc:5373
Review URL: https://codereview.webrtc.org/1531013003
Cr-Commit-Position: refs/heads/master@{#11225}
* Better param names
* Avoid using negative values for (bogus) placeholder channel counts (mostly in tests). Since channels will be changing to size_t, negative values will be illegal; it's sufficient to use 0 in these cases.
* Use arraysize()
* Use size_t for counting frames, samples, blocks, buffers, and bytes -- most of these are already size_t in most places, this just fixes some stragglers
* reinterpret_cast<int64_t>(void*) is not necessarily safe; use uintptr_t instead
* Remove unnecessary code, e.g. dead code, needlessly long/repetitive code, or function overrides that exactly match the base definition
* Fix indenting
* Use uint32_t for timestamps (matching how it's already a uint32_t in most places)
* Spelling
* RTC_CHECK_EQ(expected, actual)
* Rewrap
* Use .empty()
* Be more pedantic about matching int/int32_t/
* Remove pointless consts on input parameters to functions
* Add missing sanity checks
All this was found in the course of constructing https://codereview.webrtc.org/1316523002/ , and is being landed separately first.
BUG=none
TEST=none
Review URL: https://codereview.webrtc.org/1534193008
Cr-Commit-Position: refs/heads/master@{#11191}
Update test implementation (test/histograms.h) to be more similar a real implementation (where histogram get functions return a Histogram pointer). Add check that the name of a histogram does not change.
BUG=webrtc:5283
Review URL: https://codereview.webrtc.org/1528403003
Cr-Commit-Position: refs/heads/master@{#11161}
Removes the global simulated time that affects (or breaks) following
tests in the same binary and replaces it with SimulatedClock.
BUG=webrtc:5318
R=mflodman@webrtc.org
Review URL: https://codereview.webrtc.org/1512853002 .
Cr-Commit-Position: refs/heads/master@{#10947}
Reason for revert:
Broke downstream compile step, possibly relandable when using a MSVC version that has constexpr, other than that I'm out of ideas.
.../webrtc/base/atomicops.h:71:8: note: no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const rtc::AtomicInt&'
Original issue's description:
> Reland of "Create rtc::AtomicInt POD struct."
>
> Relands https://codereview.webrtc.org/1420043008/ with brace initializers
> instead of constructors hoping that they won't introduce static
> initializers.
>
> BUG=
> R=tommi@webrtc.org
>
> Committed: https://crrev.com/84f0970d100e67a1dc4fe9a1b16b7d293302044e
> Cr-Commit-Position: refs/heads/master@{#10920}
TBR=tommi@webrtc.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=
Review URL: https://codereview.webrtc.org/1505053002
Cr-Commit-Position: refs/heads/master@{#10922}
Seconds and fractions parts of the ntp time presented with two values, but used as one.
This helper structure can make that use more clear.
(initially introduced into rtp_rtcp as https://codereview.webrtc.org/1435833003)
BUG=webrtc:5260
Review URL: https://codereview.webrtc.org/1482593002
Cr-Commit-Position: refs/heads/master@{#10814}
* Move PlatformThread to rtc::.
* Remove ::CreateThread factory method.
* Make non-scoped_ptr from a lot of invocations.
* Make Start/Stop void.
* Remove rtc::Thread priorities, which were unused and would collide.
* Add ::IsRunning() to PlatformThread.
BUG=
R=tommi@webrtc.org
Review URL: https://codereview.webrtc.org/1476453002 .
Cr-Commit-Position: refs/heads/master@{#10812}
Also removes all virtual methods. Permits using a thread from
rtc_base_approved (namely event tracing).
BUG=webrtc:5158
R=tommi@webrtc.org
Review URL: https://codereview.webrtc.org/1469013002
Cr-Commit-Position: refs/heads/master@{#10760}