Граф коммитов

358 Коммитов

Автор SHA1 Сообщение Дата
Chris Pearce 8eff3a166e Bug 1426291 - Add Rust style mutex template which wraps data with the mutex that synchronizes it. r=jwwang
Rust's std::sync::Mutex has some nice properties. Its philosphy is to lock
data, rather than code.

It wraps data you're trying to make thread safe with a mutex, and in order to
get a reference to the wrapped data you need to lock the mutex and access it
through an intermediate layer. This is good, as the mutex that's protecting
access to the data is explicitly associated with the data, and it's impossible
to forget to take the lock before accessing the data.

This patch adds a similar mutex wrapper to Media Playback code. If it works
well, we can look at moving it into xpcom.

MozReview-Commit-ID: 4APAic6Fh8m

--HG--
extra : rebase_source : 3dc2b4916d3fd31f622af2b0c26ac3c0707d3300
2017-12-20 16:15:09 +13:00
Chun-Min Chang f23d95372a Bug 1419736 - Calculate the mp3 duration by bitrate if it's CBR; r=jya
MozReview-Commit-ID: GftmYg50FTV

--HG--
extra : rebase_source : b820c4ef80679e8d83843565c92804f0b9ce9f81
2017-12-19 15:14:57 +08:00
Sylvestre Ledru 9bfe27d903 Bug 1394734 - Replace CONFIG['GNU_C*'] by CONFIG['CC_TYPE'] r=glandium
MozReview-Commit-ID: 7duJk2gSd4m

--HG--
extra : rebase_source : 7312fe276e561e8c034a5f6749774ae812727f9c
2017-12-07 22:09:15 +01:00
Gerald Squelart 1b357db99b Bug 1407810 - Use DDLogger in media stack - r=jwwang
Mostly-mechanical additions:
- Log constructions&destructions, usually by just inheriting from
  DecoderDoctorLifeLogger, otherwise with explicit log commands (for internal
  classes for which DecoderDoctorTraits can't be specialized),
- Log links between most objects, e.g.: Media element -> decoder -> state
  machine -> reader -> demuxer -> resource, etc.

And logging some important properties and events (JS events, duration change,
frames being decoded, etc.)

More will be added later on, from just converting MOZ_LOGs, and as needed.

MozReview-Commit-ID: KgNhHSz35t0

--HG--
extra : rebase_source : dd7206e350e32671adc6f3b9e54ebf777251de2c
2017-10-10 17:55:27 +11:00
Matthew Gregan 169b8f6906 Bug 1419627 - Update mp4parse-rust callers in cheddar->cbindgen migration. r=rillian
MozReview-Commit-ID: AbyXNRrqr4X

--HG--
extra : rebase_source : be40cd12b6155a50528c3806049d3d1f47dda522
2017-11-22 15:15:51 +13:00
Alfredo.Yang be0c9536ec Bug 1417795 - remove mp4_demuxer namespace part5. r=kinetik
MozReview-Commit-ID: Fo5p3kPyxAR

--HG--
rename : dom/media/mp4/Stream.h => dom/media/mp4/ByteStream.h
rename : dom/media/mp4/Interval.h => dom/media/mp4/MP4Interval.h
extra : rebase_source : b937a231ef0280ad03195cf98b15ecd080a20f49
2017-11-17 14:30:09 +08:00
Alfredo.Yang 80dffd02b7 Bug 1417795 - remove mp4_demuxer namespace part4. r=kinetik
MozReview-Commit-ID: FvYub3hRkXr

--HG--
extra : rebase_source : b3f0d7277c44f406ecb5c084d590f2e53f2b907b
2017-11-17 09:42:02 +08:00
Alfredo.Yang a0056437d9 Bug 1417795 - remove mp4_demuxer namespace part2. r=kinetik
MozReview-Commit-ID: F8z1QW6WuUU

--HG--
extra : rebase_source : 9d137794bb1c6465da1d6b7aa6ba50265172ada3
2017-11-16 16:24:22 +08:00
JW Wang 5a99c6b197 Bug 1417774 - remove unused MediaResource::Tell(). r=bechen
MozReview-Commit-ID: 3qlP4sSh9kM

--HG--
extra : rebase_source : 4002fec6f8c43abb640f9206cd715f3ecb02b373
2017-11-15 17:18:52 +08:00
Alfredo.Yang 4b077a3d5d Bug 1417011 - move mp4 gtest. r=kinetik
MozReview-Commit-ID: DO4HknJLE5K

--HG--
rename : media/libstagefright/gtest/TestInterval.cpp => dom/media/gtest/mp4_demuxer/TestInterval.cpp
rename : media/libstagefright/gtest/TestMP4Rust.cpp => dom/media/gtest/mp4_demuxer/TestMP4.cpp
rename : media/libstagefright/gtest/TestParser.cpp => dom/media/gtest/mp4_demuxer/TestParser.cpp
rename : media/libstagefright/gtest/moz.build => dom/media/gtest/mp4_demuxer/moz.build
rename : media/libstagefright/gtest/test_case_1156505.mp4 => dom/media/gtest/mp4_demuxer/test_case_1156505.mp4
rename : media/libstagefright/gtest/test_case_1181213.mp4 => dom/media/gtest/mp4_demuxer/test_case_1181213.mp4
rename : media/libstagefright/gtest/test_case_1181215.mp4 => dom/media/gtest/mp4_demuxer/test_case_1181215.mp4
rename : media/libstagefright/gtest/test_case_1181220.mp4 => dom/media/gtest/mp4_demuxer/test_case_1181220.mp4
rename : media/libstagefright/gtest/test_case_1181223.mp4 => dom/media/gtest/mp4_demuxer/test_case_1181223.mp4
rename : media/libstagefright/gtest/test_case_1181719.mp4 => dom/media/gtest/mp4_demuxer/test_case_1181719.mp4
rename : media/libstagefright/gtest/test_case_1185230.mp4 => dom/media/gtest/mp4_demuxer/test_case_1185230.mp4
rename : media/libstagefright/gtest/test_case_1187067.mp4 => dom/media/gtest/mp4_demuxer/test_case_1187067.mp4
rename : media/libstagefright/gtest/test_case_1200326.mp4 => dom/media/gtest/mp4_demuxer/test_case_1200326.mp4
rename : media/libstagefright/gtest/test_case_1204580.mp4 => dom/media/gtest/mp4_demuxer/test_case_1204580.mp4
rename : media/libstagefright/gtest/test_case_1216748.mp4 => dom/media/gtest/mp4_demuxer/test_case_1216748.mp4
rename : media/libstagefright/gtest/test_case_1296473.mp4 => dom/media/gtest/mp4_demuxer/test_case_1296473.mp4
rename : media/libstagefright/gtest/test_case_1296532.mp4 => dom/media/gtest/mp4_demuxer/test_case_1296532.mp4
rename : media/libstagefright/gtest/test_case_1301065-harder.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065-harder.mp4
rename : media/libstagefright/gtest/test_case_1301065-i64max.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065-i64max.mp4
rename : media/libstagefright/gtest/test_case_1301065-i64min.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065-i64min.mp4
rename : media/libstagefright/gtest/test_case_1301065-max-ez.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065-max-ez.mp4
rename : media/libstagefright/gtest/test_case_1301065-max-ok.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065-max-ok.mp4
rename : media/libstagefright/gtest/test_case_1301065-overfl.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065-overfl.mp4
rename : media/libstagefright/gtest/test_case_1301065-u32max.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065-u32max.mp4
rename : media/libstagefright/gtest/test_case_1301065-u64max.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065-u64max.mp4
rename : media/libstagefright/gtest/test_case_1301065.mp4 => dom/media/gtest/mp4_demuxer/test_case_1301065.mp4
rename : media/libstagefright/gtest/test_case_1329061.mov => dom/media/gtest/mp4_demuxer/test_case_1329061.mov
rename : media/libstagefright/gtest/test_case_1351094.mp4 => dom/media/gtest/mp4_demuxer/test_case_1351094.mp4
rename : media/libstagefright/gtest/test_case_1380468.mp4 => dom/media/gtest/mp4_demuxer/test_case_1380468.mp4
rename : media/libstagefright/gtest/test_case_1388991.mp4 => dom/media/gtest/mp4_demuxer/test_case_1388991.mp4
rename : media/libstagefright/gtest/test_case_1389299.mp4 => dom/media/gtest/mp4_demuxer/test_case_1389299.mp4
rename : media/libstagefright/gtest/test_case_1389527.mp4 => dom/media/gtest/mp4_demuxer/test_case_1389527.mp4
rename : media/libstagefright/gtest/test_case_1395244.mp4 => dom/media/gtest/mp4_demuxer/test_case_1395244.mp4
rename : media/libstagefright/gtest/test_case_1410565.mp4 => dom/media/gtest/mp4_demuxer/test_case_1410565.mp4
extra : rebase_source : 1322b2964280608e41d7f3729cd1fc37656e9eda
2017-11-15 14:26:18 +08:00
Alfredo.Yang a60c99b535 Bug 1417011 - rename fmp4 to mp4. r=kinetik
MozReview-Commit-ID: JH20pUNstwx

--HG--
rename : dom/media/fmp4/MP4Decoder.cpp => dom/media/mp4/MP4Decoder.cpp
rename : dom/media/fmp4/MP4Decoder.h => dom/media/mp4/MP4Decoder.h
rename : dom/media/fmp4/MP4Demuxer.cpp => dom/media/mp4/MP4Demuxer.cpp
rename : dom/media/fmp4/MP4Demuxer.h => dom/media/mp4/MP4Demuxer.h
rename : dom/media/fmp4/moz.build => dom/media/mp4/moz.build
extra : rebase_source : b157e5589bd5296c56d505a5d27a768004bd7202
2017-11-15 09:22:13 +08:00
Andrea Marchesini 4b1b084ce7 Bug 1416724 - part 3 - AbstractThread::Dispatch return value check in dom/media, r=jwwang 2017-11-15 07:58:03 +01:00
James Cheng f733aff224 Bug 1404230 - Part4 - Add GetStatusForPolicy method in ipdl and implement it by calling CDM. r=cpearce
MozReview-Commit-ID: 8L0qKgnKMES

--HG--
extra : rebase_source : 05b6fe33a9c0cbe5ca52f245decc167889bbe6d9
2017-10-24 10:55:03 +08:00
Chris Pearce ed7f41cdf7 Bug 1414680 - Make MediaDecoderOwner::DispatchAsyncEvent() return void. r=jwwang
The return value is unchecked in MediaDecoder, and we only ever returned
NS_OK anyway. And we if the dispatch fails, we can't really do anything;
dispatching an "error" event probably won't work.

MozReview-Commit-ID: 67K6Mjft6tY

--HG--
extra : rebase_source : ad644e8b97fc11488983bc05e18c9941b3c5b062
2017-11-05 09:12:44 +01:00
Chris Pearce d716365ee0 Bug 1414680 - Remove IsActive() and IsHidden() from MediaDecoderOwner as they're unused by MediaDecoder. r=jwwang
MozReview-Commit-ID: 7NaPBmQJVQC

--HG--
extra : rebase_source : 0cfe05a1aefb23a4070b2855569110e7a4ab6b2c
2017-11-05 09:11:09 +01:00
Andreas Pehrson 46edadb25e Bug 1409727 - Add a mode and pref to disallow frame drops in MediaRecorder. r=SingingTree
MozReview-Commit-ID: CJBJURDn7gB

--HG--
extra : rebase_source : 248e904879dc68fcce7f041b9ebaed82e7aba9ed
2017-10-19 14:38:07 +02:00
James Cheng 019e9610a0 Bug 1407523 - Add more detailed message when GetCDM failed. r=cpearce
MozReview-Commit-ID: qEpvjyc6bY

--HG--
extra : rebase_source : 09e0579a76362d409749daf9b53e6a21da3818e3
2017-10-11 14:04:16 +08:00
James Cheng ea01048e16 Bug 1396493 - Part6 - Fix unified build error due to adding a new gtest unit. r=cpearce
MozReview-Commit-ID: 8l3N9c8emDb

--HG--
extra : rebase_source : e85c543e35585a5bb3c291bf8bb9c6c44be3f7d6
2017-09-26 17:28:43 +08:00
James Cheng 7cd96467c1 Bug 1396493 - Part5 - Split out the CDM testing from TestGMPCrossOrigin.cpp to TestCDMStorage.cpp and rename GMPStorage into CDMStorage. r=cpearce
MozReview-Commit-ID: H17Iz67d4i7

--HG--
extra : rebase_source : 462dc6d559bc5d38a7b132103f023c3edfab0a2c
2017-09-26 17:24:04 +08:00
James Cheng 3bdcb38e14 Bug 1396493 - Part2 - Modify the gtest to adapt to the interface change. r=cpearce
MozReview-Commit-ID: FyuXeSipeRV

--HG--
extra : rebase_source : 69adc1656e6d9d15387b03e530c970981854fe09
2017-09-25 17:40:01 +08:00
Andreas Pehrson ec8bd06f2d Bug 1296531 - Add gtests for starting a video track at t > 0. r=jesup
MozReview-Commit-ID: 4Nt4Ldcy4I6

--HG--
extra : rebase_source : 4af9880837e0302c5bf8ce4794a3ca56df895e24
2017-05-16 13:25:02 +02:00
Andreas Pehrson 689cd9dad8 Bug 1296531 - Change track encoder gtests to better mimic Gecko usage. r=jesup
MozReview-Commit-ID: 3VwqUBip33u

--HG--
extra : rebase_source : 9c49fbc1517e05b8222631557da91e73c6d2c425
2017-05-16 13:29:43 +02:00
Andreas Pehrson ca0438115d Bug 1296531 - Refactor MediaRecorder. r=jesup,SingingTree
The main purpose of this patch is to make the TrackEncoders run in a TaskQueue
to avoid multi-threaded access to members, and to change to track listeners to
allow for recording all kinds of tracks (the description of bug 1296531).

MozReview-Commit-ID: EtLXaDDBPdy

--HG--
extra : rebase_source : 5761bb2c7d5832f69cc80129e5160f173e8168c7
extra : source : 24b2a67ddf5a621a5cf58af5b9e363dac3071775
2017-05-24 18:51:47 +02:00
Andreas Pehrson 4b2c6cfb4c Bug 1296531 - Fix AudioTrackEncoder resampling gtest to match comment. r=jesup
MozReview-Commit-ID: F0uCA9VkeQf

--HG--
extra : rebase_source : 3845511108059763cffdba9d4847915f9762987a
2017-02-17 12:23:43 +01:00
Andreas Pehrson 339115c0f8 Bug 1296531 - Add gtest for encoding audio data. r=jesup
MozReview-Commit-ID: 9hAecL1VG7B

--HG--
extra : rebase_source : 87e362296629ef77d34ef95de4a36f8966d7ad97
2017-02-17 12:15:48 +01:00
Andreas Pehrson ed7be2f6af Bug 1296531 - Add AudioGenerator to TestAudioTrackEncoder for simple generation of audio. r=jesup
MozReview-Commit-ID: Cj9pyLZ3RR6

--HG--
extra : rebase_source : 9bc906b029c3abd86a28573e9d657abce47f6ded
2017-05-16 12:39:39 +02:00
Andreas Pehrson c723abd3b6 Bug 1296531 - Add gtest for AudioTrackEncoder metadata. r=jesup
MozReview-Commit-ID: EsiAuvxo6r5

--HG--
extra : rebase_source : 80641cbdd71265b0e1cf447e7a7eb22d8a611a1d
2017-02-17 11:41:05 +01:00
Andreas Pehrson 888aeb8dcc Bug 1296531 - Rename existing AudioTrackEncoder gtests to match TestVideoTrackEncoder. r=jesup
MozReview-Commit-ID: 6o5c35yGUL4

--HG--
extra : rebase_source : bea30b06aef1b8fc7e4484bb2cbd60e99a1693a1
2017-02-17 11:40:33 +01:00
Andreas Pehrson 65733907ac Bug 1296531 - Rename gtest TestTrackEncoder.cpp to TestAudioTrackEncoder.cpp. r=jesup
MozReview-Commit-ID: BaRlycq4yTS

--HG--
extra : rebase_source : 251ab91596dba26ec3a94735c5e75e75a312cef5
2017-02-17 11:15:39 +01:00
Andreas Pehrson 378fa96194 Bug 1296531 - Add gtest for an encoding that ends before all pushed data has been consumed. r=jesup
MozReview-Commit-ID: HmHZcMlQRrM

--HG--
extra : rebase_source : 115f95c59007d69155917bf3f9ebfb1ebf54d2c4
2017-01-30 18:56:24 +01:00
Andreas Pehrson 2777981cd5 Bug 1296531 - Add gtest for encoding where suspend/resume timestamps happen in the middle of frame durations. r=jesup
MozReview-Commit-ID: H2UPEC2OTxQ

--HG--
extra : rebase_source : aa70d39425a624f3fdfc6174e55113ab3e51eee7
2017-01-30 18:26:48 +01:00
Andreas Pehrson 6aca25f2ce Bug 1296531 - Add gtest for an encoding that is suspended in the beginning. r=jesup
MozReview-Commit-ID: HZeQW4Z01CR

--HG--
extra : rebase_source : 336e3ba2b5f9ab998235219d4082e137b99b15d1
2017-01-30 18:26:08 +01:00
Andreas Pehrson dfdfcbeb19 Bug 1296531 - Add gtest for a VideoTrackEncoder suspended throughout the entire recording. r=jesup
MozReview-Commit-ID: DrUOijuqlVu

--HG--
extra : rebase_source : f1c9dfd215e20b51c3696db3f005afdfabea0b80
2017-01-30 18:11:08 +01:00
Andreas Pehrson 9dfeeb0285 Bug 1296531 - Add gtest for a VideoTrackEncoder suspended until the end. r=jesup
MozReview-Commit-ID: 3oT4aNxkpMs

--HG--
extra : rebase_source : e95aa20683bf33a820a861cc9eb0b3f5a636d176
2017-01-30 18:10:41 +01:00
Andreas Pehrson 26bd49fc8f Bug 1296531 - Add gtest for suspending the video encoder. r=jesup
MozReview-Commit-ID: IRdlWPt2QhZ

--HG--
extra : rebase_source : 4bd30af752ac7227fc27bcb141cb9f527c7d3fb4
2017-01-30 17:58:35 +01:00
Andreas Pehrson 9076cddd7f Bug 1296531 - Add gtest checking that we encode by timestamp. r=jesup
MozReview-Commit-ID: CLdizoBKI9j

--HG--
extra : rebase_source : e4f61a32c0426aa0112ac9c12480a8c38d0f30f9
2017-01-30 17:48:26 +01:00
Chris Peterson 45aa2a8e8e Bug 870698 - Part 2: Replace Append("") with AppendLiteral(""). r=erahm
MozReview-Commit-ID: CrkIP4iHP1U

--HG--
extra : rebase_source : 5dc4e91a3f1860773c199f1abf3f66479218834a
extra : intermediate-source : ba51cc79847f2b43ba616f4a5d2bbc6958ca9f6d
extra : source : 1fda2fa990cc918c748ffa14fcc5dbe13fe3bdc3
2017-09-03 22:14:11 -07:00
Bryce Van Dyk 5a880668fb Bug 1336367 - Fix unified build issues from previous changes. r=pehrsons
MozReview-Commit-ID: E82sCwkCxGT

--HG--
extra : rebase_source : 7ceace01c2d91b1f65f7ab9d34ebb08dd1edb48b
2017-09-14 14:15:22 +12:00
Bryce Van Dyk 1d69fbd829 Bug 1336367 - Rename TestTrackEncoder to TestAudioTrackEncoder. r=pehrsons
The TestTrackEncoder file only contained audio encoder tests. This makes the
distinction between the already existing TestVideoTrackEncoder and these audio
tests clearer.

MozReview-Commit-ID: KmM616S72Gm

--HG--
rename : dom/media/gtest/TestTrackEncoder.cpp => dom/media/gtest/TestAudioTrackEncoder.cpp
extra : rebase_source : abd0965fd27ef0f51575ac20e908b4cc908bca47
2017-09-14 13:54:43 +12:00
Bryce Van Dyk 2cc5363e39 Bug 1336367 - Add gtest for new AudioTrackEncoder init method and behaviour. r=pehrsons
MozReview-Commit-ID: 1IWPu2lD2u6

--HG--
extra : rebase_source : 4daeef0555e637f561025440591b7954641add1d
2017-09-14 13:21:31 +12:00
Gerald Squelart 7dbe315e25 Bug 1398999 - nsDequeFunctor::operator() doesn't need to return anything - r=froydnj
Its return value is never used, and most implementations return nullptr anyway.

MozReview-Commit-ID: 8rxC053mmE8

--HG--
extra : rebase_source : 61a0b8b1373396182efd27d3c01b96e5e5541364
2017-02-09 14:06:36 +11:00
Jean-Yves Avenard 9349efba14 Bug 1396515: Fix incorrect && and || operator placements. r=sylvestre
Includes some side 80 columns fix.

MozReview-Commit-ID: IXRoQfM0Hjc

--HG--
extra : rebase_source : 918cf87b2ce82c8de245dcb23cc359289ac5f21f
2017-09-04 11:27:43 +02:00
JW Wang 3c7ce1ac45 Bug 1394316 - provide default implementation to MediaDecoderOwner methods that involve Gecko specific types. r=cpearce
MozReview-Commit-ID: 7hhJgeYH7ys

--HG--
extra : rebase_source : bc8ad684bae13e9cd4a45ba73cea92b5214ae157
2017-08-28 14:36:00 +08:00
JW Wang f8f989dd93 Bug 1394313 - replace use of nsAutoPtr with UniquePtr in MediaDecoderOwner.h. r=cpearce
MozReview-Commit-ID: 49lyvMzg7oY

--HG--
extra : rebase_source : b83cd03b0026c73d0293ef937a3c2544349f464d
2017-08-28 14:10:35 +08:00
Alex Chronopoulos c9d4805a3f Bug 1378070 - Implement multichannel WebAudio. r=padenot
* * *
[mq]: rebase

MozReview-Commit-ID: KJwH3ZeJn55

--HG--
extra : rebase_source : 0e9866c8dc5ccb98a9654c1e18b0bcef1ef5afa8
2017-08-28 17:16:20 +03:00
JW Wang db3e1718f7 Bug 1393369. P2 - remove MediaResource::GetCurrentPrincipal(). r=gerald
MozReview-Commit-ID: 9as5ya2xXdL

--HG--
extra : rebase_source : 7141cec4f3e9c38253b85e71d3b5efe5a5d7dddd
extra : source : 9d9f1de4db95a353040f7c7c484e7d9d79f275fa
2017-08-24 17:01:08 +08:00
Chris Pearce c511200e11 Bug 1392508 - Don't include nsRect.h, nsSize.h and nsIMemoryReporter.h in MediaData.h as they're unused. r=gerald
Including these also causes us to include a bunch of headers about points,
margins, and nsISupports/XPCOM/js, which we don't need.

MozReview-Commit-ID: 167YidMaeUQ

--HG--
extra : rebase_source : ab9ab45699451bb3fef613f401ae0e3853487ef5
2017-08-22 03:44:32 +12:00
Chris Pearce 4ffa31745b Bug 1392498 - Move TimeIntervals to dom::TimeRanges conversion into TimeRanges class. r=jya
If TimeUnits.h includes mozilla/dom/TimeRanges.h, then the build ends up
pulling in the Gecko DOM bindings, which pulls in a whole lot of JavaScript and
DOM bindings code. That makes it trickier to import GeckoMedia into Servo, and
makes Gecko's build slower, so move the code to convert TimeIntervals into
dom::TimeRanges.

Also remove an extraneous "virtual" and add "const" to some functions in TimeRanges.

MozReview-Commit-ID: BLeehaf9gCE

--HG--
extra : rebase_source : 84ef054cf8fd5b4434dc761a1b0a39803d3231f5
2017-08-21 15:08:25 +12:00
JW Wang 9ba52292a9 Bug 1393346. P2 - move IsTransportSeekable() from MediaResource to BaseMediaResource. r=gerald
MozReview-Commit-ID: KqpzIRH31gz

--HG--
extra : rebase_source : e9303347b34d3cbfbd8d6a6f2a474dd8f0fb1447
2017-08-24 00:08:41 +08:00
JW Wang e8dd02d4f8 Bug 1393345 - remove MediaResource::IsSuspended() which has no callers. r=gerald
MozReview-Commit-ID: Jn6TIXpFflR

--HG--
extra : rebase_source : 0efc64660523f1e846feb247075ab69e54f5f24a
2017-08-23 15:52:33 +08:00