Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Issue 2701783003: Web MIDI: implement receiving for dynamic manager instantiation on Windows (Closed)

Created:
3 years, 10 months ago by Takashi Toyoshima
Modified:
3 years, 7 months ago
Reviewers:
yukawa, yhirano
CC:
chromium-reviews, feature-media-reviews_chromium.org, toyoshim+midi_chromium.org
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

Web MIDI: implement receiving for dynamic manager instantiation on Windows This patch makes input ports work perfectly. BUG=497573, 617086, 672793 Review-Url: https://codereview.chromium.org/2701783003 Cr-Commit-Position: refs/heads/master@{#453850} Committed: https://chromium.googlesource.com/chromium/src/+/6d4bb28c8ba6e8bf8f53879aa02f0c823a0aa98d

Patch Set 1 #

Total comments: 1

Patch Set 2 : rebase #

Patch Set 3 : make map non-global/statically initialized object #

Total comments: 8

Patch Set 4 : move methods into private #

Total comments: 6

Patch Set 5 : review #7 #

Patch Set 6 : remove unused function that clang found #

Total comments: 3
Unified diffs Side-by-side diffs Delta from patch set Stats (+263 lines, -41 lines) Patch
M media/midi/dynamically_initialized_midi_manager_win.h View 1 2 3 3 chunks +18 lines, -9 lines 0 comments Download
M media/midi/dynamically_initialized_midi_manager_win.cc View 1 2 3 4 5 13 chunks +245 lines, -32 lines 3 comments Download

Dependent Patchsets:

Messages

Total messages: 23 (9 generated)
Takashi Toyoshima
just in case https://codereview.chromium.org/2701783003/diff/1/media/midi/dynamically_initialized_midi_manager_win.cc File media/midi/dynamically_initialized_midi_manager_win.cc (right): https://codereview.chromium.org/2701783003/diff/1/media/midi/dynamically_initialized_midi_manager_win.cc#newcode314 media/midi/dynamically_initialized_midi_manager_win.cc:314: in_handle_ = kInvalidInHandle; Actually this was ...
3 years, 10 months ago (2017-02-24 06:34:28 UTC) #3
Takashi Toyoshima
maybe we can start a review for the next patch in parallel? https://codereview.chromium.org/2701783003/diff/40001/media/midi/dynamically_initialized_midi_manager_win.cc File media/midi/dynamically_initialized_midi_manager_win.cc ...
3 years, 10 months ago (2017-02-24 08:53:34 UTC) #4
yhirano
https://codereview.chromium.org/2701783003/diff/40001/media/midi/dynamically_initialized_midi_manager_win.cc File media/midi/dynamically_initialized_midi_manager_win.cc (right): https://codereview.chromium.org/2701783003/diff/40001/media/midi/dynamically_initialized_midi_manager_win.cc#newcode198 media/midi/dynamically_initialized_midi_manager_win.cc:198: } else { // msg == MIM_LONGDATA Is this ...
3 years, 10 months ago (2017-02-24 12:22:58 UTC) #5
Takashi Toyoshima
PTAL Patch Set 4. https://codereview.chromium.org/2701783003/diff/40001/media/midi/dynamically_initialized_midi_manager_win.cc File media/midi/dynamically_initialized_midi_manager_win.cc (right): https://codereview.chromium.org/2701783003/diff/40001/media/midi/dynamically_initialized_midi_manager_win.cc#newcode198 media/midi/dynamically_initialized_midi_manager_win.cc:198: } else { // msg ...
3 years, 9 months ago (2017-02-27 06:44:49 UTC) #6
yhirano
https://codereview.chromium.org/2701783003/diff/60001/media/midi/dynamically_initialized_midi_manager_win.cc File media/midi/dynamically_initialized_midi_manager_win.cc (right): https://codereview.chromium.org/2701783003/diff/60001/media/midi/dynamically_initialized_midi_manager_win.cc#newcode302 media/midi/dynamically_initialized_midi_manager_win.cc:302: base::Bind(&FinalizeInPort, in_handle_, hdr_.release())); Why don't you make FinalizeInPort take ...
3 years, 9 months ago (2017-02-28 11:02:02 UTC) #7
Takashi Toyoshima
Thanks. PTAL. https://codereview.chromium.org/2701783003/diff/60001/media/midi/dynamically_initialized_midi_manager_win.cc File media/midi/dynamically_initialized_midi_manager_win.cc (right): https://codereview.chromium.org/2701783003/diff/60001/media/midi/dynamically_initialized_midi_manager_win.cc#newcode302 media/midi/dynamically_initialized_midi_manager_win.cc:302: base::Bind(&FinalizeInPort, in_handle_, hdr_.release())); On 2017/02/28 11:02:02, yhirano ...
3 years, 9 months ago (2017-03-01 01:10:36 UTC) #8
yhirano
lgtm
3 years, 9 months ago (2017-03-01 01:12:26 UTC) #9
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.org/2701783003/80001
3 years, 9 months ago (2017-03-01 01:14:18 UTC) #11
commit-bot: I haz the power
Try jobs failed on following builders: win_clang on master.tryserver.chromium.win (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.win/builders/win_clang/builds/178905)
3 years, 9 months ago (2017-03-01 02:25:43 UTC) #13
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.org/2701783003/100001
3 years, 9 months ago (2017-03-01 03:27:45 UTC) #16
commit-bot: I haz the power
Committed patchset #6 (id:100001) as https://chromium.googlesource.com/chromium/src/+/6d4bb28c8ba6e8bf8f53879aa02f0c823a0aa98d
3 years, 9 months ago (2017-03-01 05:17:26 UTC) #19
yukawa
https://codereview.chromium.org/2701783003/diff/100001/media/midi/dynamically_initialized_midi_manager_win.cc File media/midi/dynamically_initialized_midi_manager_win.cc (right): https://codereview.chromium.org/2701783003/diff/100001/media/midi/dynamically_initialized_midi_manager_win.cc#newcode353 media/midi/dynamically_initialized_midi_manager_win.cc:353: manager_->port_manager()->RegisterInHandle(in_handle_, index_); If |HandleMidiInCallback| receives |MIM_LONGDATA| before we reach ...
3 years, 8 months ago (2017-04-25 17:28:47 UTC) #20
Takashi Toyoshima
https://codereview.chromium.org/2701783003/diff/100001/media/midi/dynamically_initialized_midi_manager_win.cc File media/midi/dynamically_initialized_midi_manager_win.cc (right): https://codereview.chromium.org/2701783003/diff/100001/media/midi/dynamically_initialized_midi_manager_win.cc#newcode353 media/midi/dynamically_initialized_midi_manager_win.cc:353: manager_->port_manager()->RegisterInHandle(in_handle_, index_); TaskLock is used to avoid such race ...
3 years, 8 months ago (2017-04-26 05:35:15 UTC) #21
yukawa
3 years, 7 months ago (2017-04-27 19:45:51 UTC) #23
Message was sent while issue was closed.
https://codereview.chromium.org/2701783003/diff/100001/media/midi/dynamically...
File media/midi/dynamically_initialized_midi_manager_win.cc (right):

https://codereview.chromium.org/2701783003/diff/100001/media/midi/dynamically...
media/midi/dynamically_initialized_midi_manager_win.cc:353:
manager_->port_manager()->RegisterInHandle(in_handle_, index_);
Thank you for the explanation.

On 2017/04/26 05:35:15, Takashi Toyoshima wrote:
> Open() runs while TaskLock being locked. (Note that we call
> GetTaskLock->AssertAcquired() inside RegisterInHandle to ensure that)
> 
> HandleMidiInCallback should wait until Open() runs away at the very first step
> of obtaining the TaskLock.

If doing that does not cause any dead lock, then I'm OK.

A bit more background:

I had an impression that |midiInOpen()| is a synchronous API, which waits until
|MIM_OPEN| is handled in |HandleMidiInCallback|.  I suppose we are not hitting
dead lock right now just because currently |HandleMidiInCallback| does not try
to acquire the lock unless the event is either |MIM_DATA| or |MIM_LONGDATA|.

Perhaps |midiInUnprepareHeader()| might have behaved in a similar way: it could
be a blocking API that waits until some pending task is handled in
|HandleMidiInCallback|.

Either way, again, if we are not hitting any dead lock, then I'm OK. and thank
you for cleaning up the code and design.

Powered by Google App Engine
This is Rietveld 408576698