Commit Graph

9210 Commits

Author SHA1 Message Date
1bb8cf846d NetEq/ACM: Refactor how packet waiting times are calculated
With this change, the aggregates for packet waiting times are
calculated in NetEq's StatisticsCalculator insead of in
AcmReceiver. This simplifies things somewhat, and avoids having to
copy the raw data on polling.

R=ivoc@webrtc.org, minyue@webrtc.org

Review URL: https://codereview.webrtc.org/1296633002 .

Cr-Commit-Position: refs/heads/master@{#9778}
2015-08-25 11:08:17 +00:00
7230a21d66 Android RendererCommon: Add unittests for getDisplaySize()
BUG=webrtc:4742
R=glaznev@webrtc.org

Review URL: https://codereview.webrtc.org/1313513002 .

Cr-Commit-Position: refs/heads/master@{#9777}
2015-08-25 10:31:30 +00:00
b6cac8f5ef Get rid of the manual destructor in AudioCodingModuleImpl
By converting three raw pointers to scoped_ptrs, we can eliminate the
need for a manually-defined destructor, and generally sleep better at
night.

R=henrik.lundin@webrtc.org

Review URL: https://codereview.webrtc.org/1310213003 .

Cr-Commit-Position: refs/heads/master@{#9776}
2015-08-25 09:48:33 +00:00
87a8fbbf37 Fixing Pylint errors for plot_dynamics.py
R=pbos@webrtc.org
TBR=stefan@webrtc.org

Review URL: https://codereview.webrtc.org/1296793004 .

Cr-Commit-Position: refs/heads/master@{#9775}
2015-08-25 09:01:43 +00:00
87713d0fe6 RTCCertificates added to RTCConfiguration, used by WebRtcSession/-DescriptionFactory.
This CL allows you to, having generated one or more RTCCertificates, supply them to RTCConfiguration for CreatePeerConnection use. This means an SSLIdentity does not have to be generated with a DtlsIdentityStore[Interface/Impl] as part of the CreatePeerConnection steps because the certificate contains all the necessary information.

To create an RTCCertificate you have to do the identity generation yourself though. But you could reuse the same RTCCertificate for multiple connections.

BUG=webrtc:4927
R=tommi@webrtc.org, torbjorng@webrtc.org

Review URL: https://codereview.webrtc.org/1288033009 .

Cr-Commit-Position: refs/heads/master@{#9774}
2015-08-25 07:53:36 +00:00
dd00f113a9 Remove no-op and unused methods from AudioCodingModule
This CL removes the following no-op and/or unused methods from
AudioCodingModule and AudioCodingModuleImpl:

ConfigISACBandwidthEstimator
DecoderEstimatedBandwidth
IsInternalDTXReplacedWithWebRtc
REDPayloadISAC
ReplaceInternalDTXWithWebRtc
ResetDecoder
ResetEncoder
SendBitrate
SetReceivedEstimatedBandwidth

R=henrik.lundin@webrtc.org

Review URL: https://codereview.webrtc.org/1308283003 .

Cr-Commit-Position: refs/heads/master@{#9773}
2015-08-25 07:37:18 +00:00
7ef9d9104d Android: Remove VideoRenderer.Callbacks.canApplyRotation()
The only real implementation of VideoRenderer.Callbacks, VideoRendererGui, can always apply rotation. We don't need this in the interface.

BUG=webrtc:4145
R=glaznev@webrtc.org, guoweis@webrtc.org

Review URL: https://codereview.webrtc.org/1306073003 .

Cr-Commit-Position: refs/heads/master@{#9772}
2015-08-25 07:32:16 +00:00
bc2296de9e Add a base class to Wav{Reader,Writer} to access shared parameters.
Use it to clean up some code in audioproc_float.cc.

R=kwiberg@webrtc.org

Review URL: https://codereview.webrtc.org/1308893002 .

Cr-Commit-Position: refs/heads/master@{#9771}
2015-08-25 00:29:34 +00:00
41eeff49fa More iOS compile fixes.
BUG=chromium:81439
TEST=none
TBR=niklas.enbom

Review URL: https://codereview.webrtc.org/1314463003 .

Cr-Commit-Position: refs/heads/master@{#9770}
2015-08-24 23:24:22 +00:00
deb4875b74 Fix typos in https://codereview.webrtc.org/1230503003/ not caught by trybots.
BUG=chromium:81439
TEST=none
TBR=niklas.enbom

Review URL: https://codereview.webrtc.org/1308693007 .

Cr-Commit-Position: refs/heads/master@{#9769}
2015-08-24 22:32:03 +00:00
dce40cf804 Update a ton of audio code to use size_t more correctly and in general reduce
use of int16_t/uint16_t.

This is the upshot of a recommendation by henrik.lundin and kwiberg on an original small change ( https://webrtc-codereview.appspot.com/42569004/#ps1 ) to stop using int16_t just because values could fit in it, and is similar in nature to a previous "mass change to use size_t more" ( https://webrtc-codereview.appspot.com/23129004/ ) which also needed to be split up for review but to land all at once, since, like adding "const", such changes tend to cause a lot of transitive effects.

This was be reviewed and approved in pieces:
https://codereview.webrtc.org/1224093003
https://codereview.webrtc.org/1224123002
https://codereview.webrtc.org/1224163002
https://codereview.webrtc.org/1225133003
https://codereview.webrtc.org/1225173002
https://codereview.webrtc.org/1227163003
https://codereview.webrtc.org/1227203003
https://codereview.webrtc.org/1227213002
https://codereview.webrtc.org/1227893002
https://codereview.webrtc.org/1228793004
https://codereview.webrtc.org/1228803003
https://codereview.webrtc.org/1228823002
https://codereview.webrtc.org/1228823003
https://codereview.webrtc.org/1228843002
https://codereview.webrtc.org/1230693002
https://codereview.webrtc.org/1231713002

The change is being landed as TBR to all the folks who reviewed the above.

BUG=chromium:81439
TEST=none
R=andrew@webrtc.org, pbos@webrtc.org
TBR=aluebs, andrew, asapersson, henrika, hlundin, jan.skoglund, kwiberg, minyue, pbos, pthatcher

Review URL: https://codereview.webrtc.org/1230503003 .

Cr-Commit-Position: refs/heads/master@{#9768}
2015-08-24 21:52:45 +00:00
b594041ec8 TcpPort Reconnect should inform upper layer to start sending again.
During the reconnection phase, EWOULDBLOCK has been returned to upper layer which stops the sending of video stream.

BUG=webrtc:4930
R=pthatcher@webrtc.org

Review URL: https://codereview.webrtc.org/1288553010 .

Cr-Commit-Position: refs/heads/master@{#9767}
2015-08-24 18:58:07 +00:00
39b8eb3ab0 Fix Chromium GN build problem introduced in 608c3cfe
R=henrikg@webrtc.org

Review URL: https://codereview.webrtc.org/1314593002 .

Cr-Commit-Position: refs/heads/master@{#9766}
2015-08-24 17:50:48 +00:00
4e14f0961b Add support for external decoders in ACM
Test added too.

COAUTHOR=henrik.lundin@webrtc.org
BUG=4474
TBR=minyue@webrtc.org

Review URL: https://codereview.webrtc.org/1312493004

Cr-Commit-Position: refs/heads/master@{#9765}
2015-08-24 12:27:28 +00:00
e7cdc7f5a0 No-op CL to test if video engine core problem solved.
BUG=webrtc:4935
TBR=andrew@webrtc.org

Review URL: https://codereview.webrtc.org/1311073002

Cr-Commit-Position: refs/heads/master@{#9764}
2015-08-24 11:06:10 +00:00
d8ee4f9915 Use RtcpPacket to send BYE in RtcpSender
BUG=webrtc:2450

Review URL: https://codereview.webrtc.org/1306893003

Cr-Commit-Position: refs/heads/master@{#9763}
2015-08-24 10:25:27 +00:00
608c3cfe77 iSAC: Make separate AudioEncoder and AudioDecoder objects
The only shared state is now the bandwidth estimation info.
This reduces the amount and complexity of the locking
substantially.

Review URL: https://codereview.webrtc.org/1208993010

Cr-Commit-Position: refs/heads/master@{#9762}
2015-08-24 09:03:28 +00:00
2159b89fa2 Reland "Remove GICE (gone forever!) and PORTALLOCATOR_ENABLE_SHARED_UFRAG (enabled forever)." becauese remoting code is using dead constants and breaks the FYI bots.
This reverts commit 5bdafd44c86ee46bd7e040f19828324583418b33.

Original CL: https://codereview.webrtc.org/1263663002/

R=guoweis@webrtc.org

Review URL: https://codereview.webrtc.org/1303393002 .

Cr-Commit-Position: refs/heads/master@{#9761}
2015-08-22 03:46:18 +00:00
9deaa86136 Fix initialization/termination of AudioDeviceTemplate
AudioDeviceTemplate doesn't initialize `output_` and `input_` if the
initialization of `audio_manager_` succeeds. Similarly, it doesn't
terminate `input_` and `audio_manager_` if the termination of `output_`
succeeds. This CL fixes this.

BUG=

Review URL: https://codereview.webrtc.org/1296693003

Cr-Commit-Position: refs/heads/master@{#9760}
2015-08-22 01:38:55 +00:00
7612f1711c Fix accidental redeclaration.
Introduced here:
https://codereview.webrtc.org/1306863003/

and caught by the Android bots.

TBR=turaj@webrtc.org

Review URL: https://codereview.webrtc.org/1310653002 .

Cr-Commit-Position: refs/heads/master@{#9759}
2015-08-21 17:31:49 +00:00
c0775c0291 Fix accessing uninitialized variables when not processing a reverse stream.
TBR=turaj@webrtc.org

Review URL: https://codereview.webrtc.org/1306863003 .

Cr-Commit-Position: refs/heads/master@{#9758}
2015-08-21 16:32:53 +00:00
ea1012b2a4 address comments from https://codereview.webrtc.org/1277263002/
TBR=juberti@webrtc.org,pthather@webrtc.org

Review URL: https://codereview.webrtc.org/1305113002

Cr-Commit-Position: refs/heads/master@{#9757}
2015-08-21 16:06:37 +00:00
5bdafd44c8 Revert "Reland "Remove GICE (gone forever!) and PORTALLOCATOR_ENABLE_SHARED_UFRAG (enabled forever)." becauese remoting code is using dead constants and breaks the FYI bots.""
This reverts commit 081f34b564e1a26ffbbe9515eba1fef7c736fdde.

Original code review see
https://codereview.webrtc.org/1291363005

The revert is due to a suspicion of "Reland "Remove GICE..." being the cause of failure on Linux memcheck, see
https://build.chromium.org/p/client.webrtc/builders/Linux%20Memcheck/builds/4137

TBR=pthatcher@webrtc.org,

BUG=

Review URL: https://codereview.webrtc.org/1308753003 .

Cr-Commit-Position: refs/heads/master@{#9756}
2015-08-21 13:52:58 +00:00
81a3e60c63 Use RtcpPacket to send TMMBR in RtcpSender
BUG=webrtc:2450

Review URL: https://codereview.webrtc.org/1296163004

Cr-Commit-Position: refs/heads/master@{#9755}
2015-08-21 12:30:17 +00:00
dd4edc5813 Reland of Use RtcpPacket to send REMB in RtcpSender (patchset #1 id:1 of https://codereview.webrtc.org/1300863002/ )
Reason for revert:
This wasn't the cause of the breakage. Re-reverting.
https://code.google.com/p/webrtc/issues/detail?id=4923

Original issue's description:
> Revert of Use RtcpPacket to send REMB in RtcpSender (patchset #1 id:1 of https://codereview.webrtc.org/1290573004/ )
>
> Reason for revert:
> A few bots started failing rtc_unittests after this was commited. Ex https://build.chromium.org/p/client.webrtc/builders/Linux64%20Debug/builds/5048
>
> Original issue's description:
> > Use RtcpPacket to send REMB in RtcpSender
> >
> > BUG=webrtc:2450
> > R=asapersson@webrtc.org
> >
> > Committed: 35ab4baa20
>
> TBR=asapersson@webrtc.org
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=webrtc:2450
>
> Committed: https://crrev.com/141c5951f4beda868797c2746002a4b1b267ab2a
> Cr-Commit-Position: refs/heads/master@{#9723}

TBR=asapersson@webrtc.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:2450

Review URL: https://codereview.webrtc.org/1309723002

Cr-Commit-Position: refs/heads/master@{#9754}
2015-08-21 11:21:56 +00:00
c232096eba Remove cricket::VideoProcessor and AddVideoProcessor() functionality
This functionality is not used internally in WebRTC. Also, it's not safe, because the frame is supposed to be read-only, and it will likely not work for texture frames.

R=pthatcher@webrtc.org

Review URL: https://codereview.webrtc.org/1296113002 .

Cr-Commit-Position: refs/heads/master@{#9753}
2015-08-21 09:40:42 +00:00
9d15c66830 Include webrtc/base/json.h rather than from jsoncpp directly.
This makes us use the clever code that adapts the path depending on where we build, so it works in google3 too.

BUG=None

Review URL: https://codereview.webrtc.org/1291283003

Cr-Commit-Position: refs/heads/master@{#9752}
2015-08-21 08:00:43 +00:00
22ff75a163 Add unit tests for more packet types in rtcp_sender_unittest.
BUG=webrtc:2450

Review URL: https://codereview.webrtc.org/1291113004

Cr-Commit-Position: refs/heads/master@{#9751}
2015-08-21 07:02:53 +00:00
bfab5cbc33 Fix some minor errors with the voice engine caused by the refactor CL https://codereview.webrtc.org/1229283003/.
R=deadbeef@webrtc.org, solenberg@webrtc.org

Review URL: https://codereview.webrtc.org/1284693003 .

Cr-Commit-Position: refs/heads/master@{#9750}
2015-08-21 00:40:28 +00:00
a5b273a635 Fixing problems with RTP extension ID conflict resolution
If the same extension URI is used for both audio and video (such as
abs-send-time), we should be able to re-use the same ID. A conflict
only exists if two different URIs are attempting to use the same ID.

Review URL: https://codereview.webrtc.org/1286273003

Cr-Commit-Position: refs/heads/master@{#9749}
2015-08-21 00:30:18 +00:00
874ca3af5b Don't do reconfiguration if recv codec order/preference changes
Adding 'ReceiveCodecsHaveChanged' method that will determine if codecs
HAVE changed, irrespective of order and preference.

Review URL: https://codereview.webrtc.org/1291763003

Cr-Commit-Position: refs/heads/master@{#9748}
2015-08-21 00:19:27 +00:00
5a3acd8964 First step of passive aggressive nomination.
On the controlled side, a stun request without use-candidate attribute will
be used for sending media.

BUG=4900

Review URL: https://codereview.webrtc.org/1270613006

Cr-Commit-Position: refs/heads/master@{#9747}
2015-08-20 22:53:22 +00:00
fe3bc9d5ae Relanding "Generate localhost candidate when no STUN/TURN and portallocator has the right flag spefied."
Migrated from https://codereview.webrtc.org/1275703006/ which causes test failures for android. On android, loopback interface was used as local interface to generate candidates. Add a test case to make sure this won't be broken in the future.

Also observed some failures under content_browsertests in chromium.fyi bot but can't repro locally. Might just be temporary test issue.

BUG=webrtc:4517
TBR=pthatcher@webrtc.org

Review URL: https://codereview.webrtc.org/1299333003 .

Cr-Commit-Position: refs/heads/master@{#9746}
2015-08-20 15:48:27 +00:00
a1f590f3b6 Add helper class GuardedAsyncInvoker to protect against thread dying
BUG=webrtc:4909
R=tommi@webrtc.org

Review URL: https://codereview.webrtc.org/1303443003 .

Cr-Commit-Position: refs/heads/master@{#9745}
2015-08-20 14:42:50 +00:00
d3de9c548d rtc::Bind: Capture method objects as scoped_refptr if they are ref counted
R=tommi@webrtc.org

Review URL: https://codereview.webrtc.org/1300523004 .

Cr-Commit-Position: refs/heads/master@{#9744}
2015-08-20 14:04:01 +00:00
efefda6062 Move SystemInfo to rtc_base_approved and delete unused code.
This cl removes a lot of unused functionality in SystemInfo and reduces dependencies.
There's duplicate functionality in this class and WebRTC's CpuInfo class, so I'm consolidating the two implementations.
The CpuInfo interface will still exist since it's being used from Chrome to initialize the core count before the sandbox is engaged.
With this change, the SystemInfo class will get the benefit too of this initialization.

NOTRY=true
(using no try due to a dead android try bot)

Review URL: https://codereview.webrtc.org/1286163003

Cr-Commit-Position: refs/heads/master@{#9743}
2015-08-20 12:04:18 +00:00
ff020c01ca Android: Move common functions from VideoRendererGui to new RendererCommon file
This is primarily done to prepare for a new renderer implementation.

BUG=webrtc:4742
R=glaznev@webrtc.org

Review URL: https://codereview.webrtc.org/1298673002 .

Cr-Commit-Position: refs/heads/master@{#9742}
2015-08-20 12:03:17 +00:00
41b3a384f4 Adds RTCCertificate, a reference counted object indirectly owning an SSLCertificate (by owning the SSLIdentity).
BUG=webrtc:4927
R=tommi@chromium.org, tommi@webrtc.org, torbjorng@webrtc.org

Review URL: https://codereview.webrtc.org/1299223002 .

Cr-Commit-Position: refs/heads/master@{#9741}
2015-08-20 10:16:04 +00:00
9e260f184b Prevent TimeUntilNextProcess log spam.
Negative values from TimeUntilNextProcess indicate that the module
wanted to run sooner than possible, not that an invalid error code was
returned. As such it's not a contract error.

BUG=webrtc:4879
NOTRY=true

Review URL: https://codereview.webrtc.org/1257833004

Cr-Commit-Position: refs/heads/master@{#9740}
2015-08-20 08:23:56 +00:00
d476b95504 Android EglBase: Add helper functions to query the surface size
BUG=webrtc:4742
R=glaznev@webrtc.org

Review URL: https://codereview.webrtc.org/1299543004 .

Cr-Commit-Position: refs/heads/master@{#9739}
2015-08-20 07:58:44 +00:00
081f34b564 Reland "Remove GICE (gone forever!) and PORTALLOCATOR_ENABLE_SHARED_UFRAG (enabled forever)." becauese remoting code is using dead constants and breaks the FYI bots."
This reverts commit 475243a134be003aab30bb17294ca6c664d0ef81.

R=guoweis@webrtc.org

Review URL: https://codereview.webrtc.org/1291363005 .

Cr-Commit-Position: refs/heads/master@{#9738}
2015-08-20 03:37:59 +00:00
3d564c1015 Add instrumentation to track the IceEndpointType.
The IceEndpointType has the format of <local_endpoint>_<remote_endpoint>. It is recorded on the BestConnection when we have the first OnTransportCompleted signaled.

BUG=webrtc:4918
R=pthatcher@webrtc.org

Review URL: https://codereview.webrtc.org/1277263002 .

Cr-Commit-Position: refs/heads/master@{#9737}
2015-08-19 23:51:22 +00:00
86cb923c20 In the past, P2PPortAllocator.enable_multiple_routes is the indicator whether we should bind to the any address. It's easy to translate that into a port allocator flag in P2PPortAllocator's ctor. Going forward, we have to depend on an asynchronous permission check to determine whether gathering local address is allowed or not, hence the current way of passing it through constructor approach won't work any more. The asynchronous check will trigger SignalNetowrksChanged so we could only check that inside DoAllocate.
Adapter enumeration disable should be a concept from Network. Network will be hooked up with media permission (mic/camera) to check whether gathering local address is allowed.

BUG=crbug.com/520101
R=juberti@webrtc.org, pthatcher@webrtc.org

Committed: ba9ab4cd8d

Committed: 47872ec90c

Review URL: https://codereview.webrtc.org/1284113003 .

Cr-Commit-Position: refs/heads/master@{#9736}
2015-08-19 17:57:57 +00:00
47872ec90c In the past, P2PPortAllocator.enable_multiple_routes is the indicator whether we should bind to the any address. It's easy to translate that into a port allocator flag in P2PPortAllocator's ctor. Going forward, we have to depend on an asynchronous permission check to determine whether gathering local address is allowed or not, hence the current way of passing it through constructor approach won't work any more. The asynchronous check will trigger SignalNetowrksChanged so we could only check that inside DoAllocate.
Adapter enumeration disable should be a concept from Network. Network will be hooked up with media permission (mic/camera) to check whether gathering local address is allowed.

BUG=crbug.com/520101
R=juberti@webrtc.org, pthatcher@webrtc.org

Committed: ba9ab4cd8d

Review URL: https://codereview.webrtc.org/1284113003 .

Cr-Commit-Position: refs/heads/master@{#9735}
2015-08-19 17:32:51 +00:00
5d69648782 Disabling TestUdpIPv6 on Linux
BUG=webrtc:4923, 522036
NOTRY=true

Review URL: https://codereview.webrtc.org/1298363002

Cr-Commit-Position: refs/heads/master@{#9734}
2015-08-19 11:42:07 +00:00
048e80caca Revert of Revert "Remove CpuMonitor and related, unused, code." (patchset #1 id:1 of https://codereview.webrtc.org/1287913004/ )
Reason for revert:
(retrying with my webrtc account...)
The reason for reverting is: Re-landing the change that removes the CpuMonitor class after having fixed the build issue in Chromium..

Original issue's description:
> Revert "Remove CpuMonitor and related, unused, code."
>
> This reverts commit 1a24012680f25440aa1d117373df2af14cdc2fc1.
>
> TBR=tommi@webrtc.org,pthatcher@webrtc.org
> BUG=
>
> This breaks
> http://build.chromium.org/p/chromium.webrtc.fyi/builders/Linux/builds/20148/steps/compile/logs/stdio
>
> Committed: a472e968c9

TBR=pthatcher@webrtc.org,guoweis@webrtc.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=

Review URL: https://codereview.webrtc.org/1290033005

Cr-Commit-Position: refs/heads/master@{#9733}
2015-08-19 11:00:04 +00:00
c844ca425e Move scoped_ptr.h to rtc_base_approved.
This is more a formality than anything since scoped_ptr.h is already being included from rtc_base_approved code.

BUG=
R=magjed@webrtc.org

Review URL: https://codereview.webrtc.org/1287203007 .

Cr-Commit-Position: refs/heads/master@{#9732}
2015-08-19 08:51:31 +00:00
1f4ffe02fb NetEq: Implement two UMA stats for delay adaptation.
This CL adds calculation and logging of average excess buffer delay
and number of delayed packet outage events per minute.

The first is the average of time spent in the packet buffer for all
packets. The average is calculated for intervals of one minute, and
the result is logged to the UMA stat
WebRTC.Audio.AverageExcessBufferDelayMs.

The second is a counter of delayed packet outage events that is
restarted every minute, and the result is logged to the UMA stat
WebRTC.Audio.DelayedPacketOutageEventsPerMinute. For a description of
delayed packet outages, see previous CL implementing a duration log
for these events.

BUG=webrtc:4915, chromium:488124
R=minyue@webrtc.org

Review URL: https://codereview.webrtc.org/1287333005 .

Cr-Commit-Position: refs/heads/master@{#9731}
2015-08-19 08:47:00 +00:00
a472e968c9 Revert "Remove CpuMonitor and related, unused, code."
This reverts commit 1a24012680f25440aa1d117373df2af14cdc2fc1.

TBR=tommi@webrtc.org,pthatcher@webrtc.org
BUG=

This breaks
http://build.chromium.org/p/chromium.webrtc.fyi/builders/Linux/builds/20148/steps/compile/logs/stdio

Review URL: https://codereview.webrtc.org/1287913004 .

Cr-Commit-Position: refs/heads/master@{#9730}
2015-08-19 00:08:50 +00:00
370c8848ad Revert "Generate localhost candidate when no STUN/TURN and portallocator has the right flag spefied."
This reverts commit 0a2955f227666efd87b2a303a69c083ef801c528.

Revert "In the past, P2PPortAllocator.enable_multiple_routes is the indicator whether we should bind to the any address. It's easy to translate that into a port allocator flag in P2PPortAllocator's ctor. Going forward, we have to depend on an asynchronous permission check to determine whether gathering local address is allowed or not, hence the current way of passing it through constructor approach won't work any more. The asynchronous check will trigger SignalNetowrksChanged so we could only check that inside DoAllocate."

This reverts commit ba9ab4cd8d2e8fbc068dc36b5e6f6331d7deeccf.

TBR=pthatcher@webrtc.org

Review URL: https://codereview.webrtc.org/1288843003 .

Cr-Commit-Position: refs/heads/master@{#9729}
2015-08-19 00:00:21 +00:00