New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 824019 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: May 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android , Windows , Chrome , Mac , Fuchsia
Pri: 1
Type: Bug

Blocking:
issue 647200
issue 834666


Participants' hotlists:
Audio-Service


Sign in to add a comment

Migrate legacy audio mirroring to use new AudioService loopback API

Project Member Reported by m...@chromium.org, Mar 21 2018

Issue description

This is a general tracking bug for all work related to migrating away from the legacy audio mirroring implementation, and towards the new mojo AudioService loopback API. Lots of object graph surgery coming our way here! :)
 
Project Member

Comment 1 by bugdroid1@chromium.org, Mar 22 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f

commit cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f
Author: Yuri Wiitala <miu@chromium.org>
Date: Thu Mar 22 19:31:30 2018

AudioMirroringManager: Moving the cheese

This change removes AudioMirroringManager from AudioRendererHost and
AudioOutputDelegateImpl, and moves the Add/RemoveDiverter()
responsibilities into AudioOutputController. In order for
AudioOutputController to notify the AudioMirroringManager of its
existence, we temporarily use AudioManager to host a couple of generic
Add/RemoveDiverter() callbacks.

This modification of the object graph is necessary to resolve a chicken-
and-egg problem, where we cannot otherwise begin moving
AudioOutputStream creation/management into the new Audio Service without
breaking existing audio mirroring and muting functionality. As other
"pieces of cheese" are moved around by the project team, we will be able
to revert the changes to AudioManager.

Bug:  824019 
Cq-Include-Trybots: luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I22fda03afa3aba396e3bb0c9f2f46bada0fa9bea
Reviewed-on: https://chromium-review.googlesource.com/972648
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Reviewed-by: Gabriel Charette <gab@chromium.org>
Reviewed-by: Max Morin <maxmorin@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#545204}
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/browser_main_loop.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/media/capture/audio_mirroring_manager.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/media/capture/audio_mirroring_manager.h
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/media/capture/audio_mirroring_manager_unittest.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/renderer_host/media/audio_output_delegate_impl.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/renderer_host/media/audio_output_delegate_impl.h
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/renderer_host/media/audio_renderer_host.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/renderer_host/media/audio_renderer_host.h
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/content/browser/renderer_host/render_process_host_impl.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/media/audio/audio_manager.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/media/audio/audio_manager.h
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/media/audio/audio_output_controller.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/media/audio/audio_output_controller.h
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/media/audio/audio_output_controller_unittest.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/services/audio/output_stream.cc
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/services/audio/output_stream.h
[modify] https://crrev.com/cbc0ee092b7b4c7df1946daaa70e9bb7b39f9c4f/services/audio/stream_factory.cc

Project Member

Comment 2 by bugdroid1@chromium.org, Apr 4 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a8e2568ec1115fb89204f2ef5673b827544d7765

commit a8e2568ec1115fb89204f2ef5673b827544d7765
Author: Yuri Wiitala <miu@chromium.org>
Date: Wed Apr 04 23:55:38 2018

Introduce audio::GroupCoordinator and audio::GroupMember concept.

The GroupCoordinator will be used in the new Audio Service loopback and
muting features. It tracks one or more audio outputs that are members of
the same group, and notifies interested entities (e.g., a muter, a
loopback mixer, etc.) of membership changes to the group.

Bug:  824019 
Change-Id: I9b8b1564e8fa7977d2d8dd21c466c7cbf5cdd3f2
Reviewed-on: https://chromium-review.googlesource.com/987093
Reviewed-by: Max Morin <maxmorin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548257}
[modify] https://crrev.com/a8e2568ec1115fb89204f2ef5673b827544d7765/services/audio/BUILD.gn
[add] https://crrev.com/a8e2568ec1115fb89204f2ef5673b827544d7765/services/audio/group_coordinator.cc
[add] https://crrev.com/a8e2568ec1115fb89204f2ef5673b827544d7765/services/audio/group_coordinator.h
[add] https://crrev.com/a8e2568ec1115fb89204f2ef5673b827544d7765/services/audio/group_coordinator_unittest.cc
[add] https://crrev.com/a8e2568ec1115fb89204f2ef5673b827544d7765/services/audio/group_member.h

Project Member

Comment 3 by bugdroid1@chromium.org, Apr 6 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd

commit 08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd
Author: Yuri Wiitala <miu@chromium.org>
Date: Fri Apr 06 03:42:05 2018

Fork media::AudioOutputController → audio::OutputController

In order to break-away from the legacy threading model and eliminate the
need for future circular dependencies on src/media/(audio|base), this
change forks AudioOutputController and AudioSyncReader into
src/services/audio.

In addition to the namespace and class naming changes, the following
modifications have been made on the forked code:

1. Removed the ref-counting of audio::OutputController, eliminated the
Create() factory methods, and changed a few heap-allocated objects into
proper class data members (i.e., composition instead of indirection).

2. Removed the XYZ()→DoXYZ() thread-trampoline methods.

3. Updated comments that became misleading or are not otherwise accurate
to how things work in the new Audio Service.

4. Changed the audio::OutputStream to use the forked OutputController
and SyncReader.

5. Updated unit tests.

Further clean-ups and code deletions/refactorings are intentionally
being left TODO in future patches.

Bug:  824019 ,  803102 
Change-Id: If479c63909c252c8fca135c9a51dcac76feeec8c
Reviewed-on: https://chromium-review.googlesource.com/982904
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Reviewed-by: Max Morin <maxmorin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548658}
[modify] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/BUILD.gn
[add] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/output_controller.cc
[add] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/output_controller.h
[add] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/output_controller_unittest.cc
[modify] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/output_stream.cc
[modify] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/output_stream.h
[add] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/sync_reader.cc
[add] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/sync_reader.h
[add] https://crrev.com/08d2ef4b272610e6085aa3ea7eb0f421d1d2c8cd/services/audio/sync_reader_unittest.cc

Project Member

Comment 4 by bugdroid1@chromium.org, Apr 12 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/0355b2473dd07c2fde13c657f783bf219b7869a3

commit 0355b2473dd07c2fde13c657f783bf219b7869a3
Author: Yuri Wiitala <miu@chromium.org>
Date: Thu Apr 12 02:42:34 2018

Introduce audio::LocalMuter for Audio Service muting

The LocalMuter is responsible for muting all audio output streams
belonging to the same audio group (e.g., all audio emitted from the same
browser tab). When instantiated, the streams are muted; and any newly-
created streams will be muted before playout is ever attempted. Upon
destruction, the streams are all unmuted.

This change includes the service-side implementation, mojo IDL, and
related glue.

Bug:  824019 
Change-Id: I291eea0f50535c56c5015ae64e6fb5fc14e076bb
Reviewed-on: https://chromium-review.googlesource.com/999103
Reviewed-by: Max Morin <maxmorin@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550001}
[modify] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/BUILD.gn
[modify] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/group_coordinator_unittest.cc
[add] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/local_muter.cc
[add] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/local_muter.h
[add] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/local_muter_unittest.cc
[modify] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/public/mojom/stream_factory.mojom
[modify] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/stream_factory.cc
[modify] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/stream_factory.h
[add] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/test/mock_group_member.cc
[add] https://crrev.com/0355b2473dd07c2fde13c657f783bf219b7869a3/services/audio/test/mock_group_member.h

Project Member

Comment 5 by bugdroid1@chromium.org, Apr 12 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1ffa259b21360c77bffaf62e8460644b2d54dc18

commit 1ffa259b21360c77bffaf62e8460644b2d54dc18
Author: Yuri Wiitala <miu@chromium.org>
Date: Thu Apr 12 06:18:12 2018

audio::OutputController implements GroupMember (muting and snooping)

Adds the new audio::GroupMember implementation to provide muting and
snooping functionality to audio::OutputController.

Bug:  824019 
Change-Id: Ib21eccf43d4f6994657731545ceb3f4218c18cbe
Reviewed-on: https://chromium-review.googlesource.com/1001512
Commit-Queue: Olga Sharonova <olka@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550042}
[modify] https://crrev.com/1ffa259b21360c77bffaf62e8460644b2d54dc18/services/audio/output_controller.cc
[modify] https://crrev.com/1ffa259b21360c77bffaf62e8460644b2d54dc18/services/audio/output_controller.h
[modify] https://crrev.com/1ffa259b21360c77bffaf62e8460644b2d54dc18/services/audio/output_controller_unittest.cc
[modify] https://crrev.com/1ffa259b21360c77bffaf62e8460644b2d54dc18/services/audio/output_stream.cc
[modify] https://crrev.com/1ffa259b21360c77bffaf62e8460644b2d54dc18/services/audio/output_stream.h
[modify] https://crrev.com/1ffa259b21360c77bffaf62e8460644b2d54dc18/services/audio/stream_factory.cc

Comment 6 by olka@chromium.org, Apr 19 2018

Blocking: 834666

Comment 7 by olka@chromium.org, Apr 19 2018

Blocking: 647200
Project Member

Comment 8 by bugdroid1@chromium.org, Apr 27 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a6046737cb83e4d276d5f5701041aaff0d7a8b01

commit a6046737cb83e4d276d5f5701041aaff0d7a8b01
Author: Yuri Wiitala <miu@chromium.org>
Date: Fri Apr 27 05:50:41 2018

Add FakeGroupMember audio test utility.

This is a simple test utility that will be used in upcoming tests to
fake the behavior of an audio::GroupMember that can be "snooped" upon.
Tests can configure it to generate a sine wave tone, per channel, and
also manually push each successive AudioBus to an
audio::GroupMember::Snooper.

This will be used in later changes to support testing of the new
loopback functionality in the Audio Service.

Bug:  824019 
Change-Id: I4358319f215fc6692143d4ab0ae52703c1c30427
Reviewed-on: https://chromium-review.googlesource.com/1029546
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Reviewed-by: Yuri Wiitala <miu@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#554322}
[modify] https://crrev.com/a6046737cb83e4d276d5f5701041aaff0d7a8b01/services/audio/BUILD.gn
[add] https://crrev.com/a6046737cb83e4d276d5f5701041aaff0d7a8b01/services/audio/test/fake_group_member.cc
[add] https://crrev.com/a6046737cb83e4d276d5f5701041aaff0d7a8b01/services/audio/test/fake_group_member.h

Project Member

Comment 9 by bugdroid1@chromium.org, May 5 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/40c0897e3675921ba227e5ebc2fcec367d145bec

commit 40c0897e3675921ba227e5ebc2fcec367d145bec
Author: Yuri Wiitala <miu@chromium.org>
Date: Sat May 05 16:15:24 2018

Add DelayBuffer utility class for later loopback functionality.

The DelayBuffer records and maintains a recent history of an audio
signal, then allows read-back of any part of the recording. While this
looks a lot like "yet another FIFO," it is not because the reads will
typically be somewhere in the middle, not the end, of the circular
queue.

This will be used in a later change to support loopback functionality in
the Audio Service.

Bug:  824019 
Change-Id: I5321724ac3a55929318d411a08d33344a39c2272
Reviewed-on: https://chromium-review.googlesource.com/1029617
Reviewed-by: Olga Sharonova <olka@chromium.org>
Reviewed-by: Xiangjun Zhang <xjz@chromium.org>
Reviewed-by: Yuri Wiitala <miu@chromium.org>
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556334}
[modify] https://crrev.com/40c0897e3675921ba227e5ebc2fcec367d145bec/services/audio/BUILD.gn
[add] https://crrev.com/40c0897e3675921ba227e5ebc2fcec367d145bec/services/audio/delay_buffer.cc
[add] https://crrev.com/40c0897e3675921ba227e5ebc2fcec367d145bec/services/audio/delay_buffer.h
[add] https://crrev.com/40c0897e3675921ba227e5ebc2fcec367d145bec/services/audio/delay_buffer_unittest.cc

Project Member

Comment 10 by bugdroid1@chromium.org, May 5 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/690f3329112cf3455bdf35e28f2f16d70bfeca69

commit 690f3329112cf3455bdf35e28f2f16d70bfeca69
Author: Yuri Wiitala <miu@chromium.org>
Date: Sat May 05 18:35:05 2018

Add FakeConsumer audio test utility.

This is a simple test utility that will be used in upcoming tests to act
as a final consumer of audio in loopback unit tests. It records all the
audio samples given to it, and then provides useful utility methods to
analyze/interpret the signal.

Bug:  824019 
Change-Id: I0ef3476b2e8004c77265a85d51f5dd69a3b309b3
Reviewed-on: https://chromium-review.googlesource.com/1041653
Reviewed-by: Olga Sharonova <olka@chromium.org>
Reviewed-by: Xiangjun Zhang <xjz@chromium.org>
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556341}
[modify] https://crrev.com/690f3329112cf3455bdf35e28f2f16d70bfeca69/services/audio/BUILD.gn
[add] https://crrev.com/690f3329112cf3455bdf35e28f2f16d70bfeca69/services/audio/test/fake_consumer.cc
[add] https://crrev.com/690f3329112cf3455bdf35e28f2f16d70bfeca69/services/audio/test/fake_consumer.h

Project Member

Comment 11 by bugdroid1@chromium.org, May 7 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/419c855f97b75681c59f855b22d0f46a48065fb8

commit 419c855f97b75681c59f855b22d0f46a48065fb8
Author: Yuri Wiitala <miu@chromium.org>
Date: Mon May 07 02:51:38 2018

Add worker thread to audio::OwningAudioManagerAccessor.

When the Audio Service will be running in its standalone process, the
worker thread will be used to drive the audio flows for the loopback
streams, as well as all the fake streams (including the those used for
muting). These things should not become blocked by long-running control
tasks on the main thread.

Bug:  824019 
Change-Id: I6b7fd4cb110842c70a26072161dc91929ed4f19d
Reviewed-on: https://chromium-review.googlesource.com/1046153
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556369}
[modify] https://crrev.com/419c855f97b75681c59f855b22d0f46a48065fb8/services/audio/owning_audio_manager_accessor.cc

Project Member

Comment 12 by bugdroid1@chromium.org, May 7 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a7e8d6a36b7c04a8c1d4c745cda150dec13331b4

commit a7e8d6a36b7c04a8c1d4c745cda150dec13331b4
Author: Max Morin <maxmorin@chromium.org>
Date: Mon May 07 12:37:38 2018

Add group_id member in ForwardingAudioStreamFactory

Actually using it is TODO.

No-Try: true
Bug:  824019 
Change-Id: I9053827dba2504218559be523574b71ef079c72b
Reviewed-on: https://chromium-review.googlesource.com/1046646
Commit-Queue: Max Morin <maxmorin@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556421}
[modify] https://crrev.com/a7e8d6a36b7c04a8c1d4c745cda150dec13331b4/content/browser/media/forwarding_audio_stream_factory.cc
[modify] https://crrev.com/a7e8d6a36b7c04a8c1d4c745cda150dec13331b4/content/browser/media/forwarding_audio_stream_factory.h

Project Member

Comment 13 by bugdroid1@chromium.org, May 8 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/f1b4c43b85e7cec2a61da121b9244deffec38d03

commit f1b4c43b85e7cec2a61da121b9244deffec38d03
Author: Yuri Wiitala <miu@chromium.org>
Date: Tue May 08 07:39:23 2018

The SnooperNode: Audio loopback for a single stream.

An audio::GroupMember::Snooper that records the audio from a GroupMember
on one thread, and re-renders it to the desired output format on another
thread. Since the data flow rates are known to be driven by different
clocks (audio hardware clock versus system clock), the SnooperNode also
uses its resampler to compensate for skew and re-synchronize the audio
going into and out of it.

Bug:  824019 
Change-Id: I87d410724fd00f9372232bfffdfbb89ada0b3de8
Reviewed-on: https://chromium-review.googlesource.com/1041657
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Reviewed-by: Xiangjun Zhang <xjz@chromium.org>
Reviewed-by: Chrome Cunningham <chcunningham@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556719}
[modify] https://crrev.com/f1b4c43b85e7cec2a61da121b9244deffec38d03/media/base/channel_mixer.cc
[modify] https://crrev.com/f1b4c43b85e7cec2a61da121b9244deffec38d03/media/base/channel_mixer.h
[modify] https://crrev.com/f1b4c43b85e7cec2a61da121b9244deffec38d03/services/audio/BUILD.gn
[add] https://crrev.com/f1b4c43b85e7cec2a61da121b9244deffec38d03/services/audio/snooper_node.cc
[add] https://crrev.com/f1b4c43b85e7cec2a61da121b9244deffec38d03/services/audio/snooper_node.h
[add] https://crrev.com/f1b4c43b85e7cec2a61da121b9244deffec38d03/services/audio/snooper_node_unittest.cc

Project Member

Comment 14 by bugdroid1@chromium.org, May 8 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/54d2a2da9da45f819cd9db7ea4efb79a00324c27

commit 54d2a2da9da45f819cd9db7ea4efb79a00324c27
Author: Guido Urdaneta <guidou@chromium.org>
Date: Tue May 08 12:35:13 2018

Revert "The SnooperNode: Audio loopback for a single stream."

This reverts commit f1b4c43b85e7cec2a61da121b9244deffec38d03.

Reason for revert: Causes reliable failures on  Win10 Tests x64 (dbg) bot

Sample failed runs:
https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Win10%20Tests%20x64%20%28dbg%29/413
https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Win10%20Tests%20x64%20%28dbg%29/414

Sample logs:
[ RUN      ] SnooperNodeTest.ContinuousAudioFlowAdaptsToSkew/1
[ RUN      ] SnooperNodeTest.ContinuousAudioFlowAdaptsToSkew/1
[ RUN      ] SnooperNodeTest.ContinuousAudioFlowAdaptsToSkew/1
[ RUN      ] SnooperNodeTest.ContinuousAudioFlowAdaptsToSkew/1


Original change's description:
> The SnooperNode: Audio loopback for a single stream.
> 
> An audio::GroupMember::Snooper that records the audio from a GroupMember
> on one thread, and re-renders it to the desired output format on another
> thread. Since the data flow rates are known to be driven by different
> clocks (audio hardware clock versus system clock), the SnooperNode also
> uses its resampler to compensate for skew and re-synchronize the audio
> going into and out of it.
> 
> Bug:  824019 
> Change-Id: I87d410724fd00f9372232bfffdfbb89ada0b3de8
> Reviewed-on: https://chromium-review.googlesource.com/1041657
> Commit-Queue: Yuri Wiitala <miu@chromium.org>
> Reviewed-by: Xiangjun Zhang <xjz@chromium.org>
> Reviewed-by: Chrome Cunningham <chcunningham@chromium.org>
> Reviewed-by: Olga Sharonova <olka@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#556719}

TBR=miu@chromium.org,chcunningham@chromium.org,olka@chromium.org,xjz@chromium.org

Change-Id: I47750e3abb5e9387733b5fbf275d930a79a6d45e
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug:  824019 
Reviewed-on: https://chromium-review.googlesource.com/1049905
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556767}
[modify] https://crrev.com/54d2a2da9da45f819cd9db7ea4efb79a00324c27/media/base/channel_mixer.cc
[modify] https://crrev.com/54d2a2da9da45f819cd9db7ea4efb79a00324c27/media/base/channel_mixer.h
[modify] https://crrev.com/54d2a2da9da45f819cd9db7ea4efb79a00324c27/services/audio/BUILD.gn
[delete] https://crrev.com/98b10b51c74376ddabe8571f6c05829867710dd2/services/audio/snooper_node.cc
[delete] https://crrev.com/98b10b51c74376ddabe8571f6c05829867710dd2/services/audio/snooper_node.h
[delete] https://crrev.com/98b10b51c74376ddabe8571f6c05829867710dd2/services/audio/snooper_node_unittest.cc

Project Member

Comment 15 by bugdroid1@chromium.org, May 8 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6dc7843c124671e9cb9741810fb46ad761810540

commit 6dc7843c124671e9cb9741810fb46ad761810540
Author: Yuri Wiitala <miu@chromium.org>
Date: Tue May 08 23:33:01 2018

Reland "The SnooperNode: Audio loopback for a single stream."

This is a reland of f1b4c43b85e7cec2a61da121b9244deffec38d03

Original change's description:
> The SnooperNode: Audio loopback for a single stream.
>
> An audio::GroupMember::Snooper that records the audio from a GroupMember
> on one thread, and re-renders it to the desired output format on another
> thread. Since the data flow rates are known to be driven by different
> clocks (audio hardware clock versus system clock), the SnooperNode also
> uses its resampler to compensate for skew and re-synchronize the audio
> going into and out of it.
>
> Bug:  824019 
> Change-Id: I87d410724fd00f9372232bfffdfbb89ada0b3de8
> Reviewed-on: https://chromium-review.googlesource.com/1041657
> Commit-Queue: Yuri Wiitala <miu@chromium.org>
> Reviewed-by: Xiangjun Zhang <xjz@chromium.org>
> Reviewed-by: Chrome Cunningham <chcunningham@chromium.org>
> Reviewed-by: Olga Sharonova <olka@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#556719}

TBR=chcunningham@chromium.org,olka@chromium.org

Bug:  824019 
Change-Id: I579b99bda7bc53710004470c0cc07f8a06cdd8b5
Reviewed-on: https://chromium-review.googlesource.com/1050403
Reviewed-by: Yuri Wiitala <miu@chromium.org>
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#557008}
[modify] https://crrev.com/6dc7843c124671e9cb9741810fb46ad761810540/media/base/channel_mixer.cc
[modify] https://crrev.com/6dc7843c124671e9cb9741810fb46ad761810540/media/base/channel_mixer.h
[modify] https://crrev.com/6dc7843c124671e9cb9741810fb46ad761810540/services/audio/BUILD.gn
[add] https://crrev.com/6dc7843c124671e9cb9741810fb46ad761810540/services/audio/snooper_node.cc
[add] https://crrev.com/6dc7843c124671e9cb9741810fb46ad761810540/services/audio/snooper_node.h
[add] https://crrev.com/6dc7843c124671e9cb9741810fb46ad761810540/services/audio/snooper_node_unittest.cc

Project Member

Comment 16 by bugdroid1@chromium.org, May 9 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/8ddcbeda2299dd9a3e0ac330b17ef859ff2a6823

commit 8ddcbeda2299dd9a3e0ac330b17ef859ff2a6823
Author: Yuri Wiitala <miu@chromium.org>
Date: Wed May 09 22:40:01 2018

Reland "Reland "The SnooperNode: Audio loopback for a single stream.""

This is a reland of 6dc7843c124671e9cb9741810fb46ad761810540

Original change's description:
> Reland "The SnooperNode: Audio loopback for a single stream."
>
> This is a reland of f1b4c43b85e7cec2a61da121b9244deffec38d03
>
> Original change's description:
> > The SnooperNode: Audio loopback for a single stream.
> >
> > An audio::GroupMember::Snooper that records the audio from a GroupMember
> > on one thread, and re-renders it to the desired output format on another
> > thread. Since the data flow rates are known to be driven by different
> > clocks (audio hardware clock versus system clock), the SnooperNode also
> > uses its resampler to compensate for skew and re-synchronize the audio
> > going into and out of it.
> >
> > Bug:  824019 
> > Change-Id: I87d410724fd00f9372232bfffdfbb89ada0b3de8
> > Reviewed-on: https://chromium-review.googlesource.com/1041657
> > Commit-Queue: Yuri Wiitala <miu@chromium.org>
> > Reviewed-by: Xiangjun Zhang <xjz@chromium.org>
> > Reviewed-by: Chrome Cunningham <chcunningham@chromium.org>
> > Reviewed-by: Olga Sharonova <olka@chromium.org>
> > Cr-Commit-Position: refs/heads/master@{#556719}
>
> TBR=chcunningham@chromium.org,olka@chromium.org
>
> Bug:  824019 
> Change-Id: I579b99bda7bc53710004470c0cc07f8a06cdd8b5
> Reviewed-on: https://chromium-review.googlesource.com/1050403
> Reviewed-by: Yuri Wiitala <miu@chromium.org>
> Commit-Queue: Yuri Wiitala <miu@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#557008}

TBR=chcunningham@chromium.org,olka@chromium.org

Bug:  824019 
Change-Id: I7b0dc10863fac6c201f770fe2d7e6f268474bb05
Reviewed-on: https://chromium-review.googlesource.com/1053147
Reviewed-by: Yuri Wiitala <miu@chromium.org>
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#557349}
[modify] https://crrev.com/8ddcbeda2299dd9a3e0ac330b17ef859ff2a6823/media/base/channel_mixer.cc
[modify] https://crrev.com/8ddcbeda2299dd9a3e0ac330b17ef859ff2a6823/media/base/channel_mixer.h
[modify] https://crrev.com/8ddcbeda2299dd9a3e0ac330b17ef859ff2a6823/services/audio/BUILD.gn
[add] https://crrev.com/8ddcbeda2299dd9a3e0ac330b17ef859ff2a6823/services/audio/snooper_node.cc
[add] https://crrev.com/8ddcbeda2299dd9a3e0ac330b17ef859ff2a6823/services/audio/snooper_node.h
[add] https://crrev.com/8ddcbeda2299dd9a3e0ac330b17ef859ff2a6823/services/audio/snooper_node_unittest.cc

Project Member

Comment 17 by bugdroid1@chromium.org, May 10 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/690551576ecc5a40a03f651e19f0746130dfb367

commit 690551576ecc5a40a03f651e19f0746130dfb367
Author: Yuri Wiitala <miu@chromium.org>
Date: Thu May 10 03:19:00 2018

Introduce audio::LoopbackStream implementation.

The LoopbackStream is an audio::InputStream that provides the result of
looping-back and mixing-together all current and future audio output
streams belonging to the same "group." An example of this would be for
tab capture, where all output streams from one tab are recorded and then
re-mixed into a single capture stream.

Bug:  824019 
Change-Id: I3374182798452bbf9d8688e318dc0546d3630f5e
Reviewed-on: https://chromium-review.googlesource.com/1041661
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Reviewed-by: Max Morin <maxmorin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#557440}
[modify] https://crrev.com/690551576ecc5a40a03f651e19f0746130dfb367/services/audio/BUILD.gn
[add] https://crrev.com/690551576ecc5a40a03f651e19f0746130dfb367/services/audio/loopback_stream.cc
[add] https://crrev.com/690551576ecc5a40a03f651e19f0746130dfb367/services/audio/loopback_stream.h
[add] https://crrev.com/690551576ecc5a40a03f651e19f0746130dfb367/services/audio/loopback_stream_unittest.cc

Project Member

Comment 18 by bugdroid1@chromium.org, May 11 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/79723068d858620d5aebb9baa675bf5feaa93a2d

commit 79723068d858620d5aebb9baa675bf5feaa93a2d
Author: Yuri Wiitala <miu@chromium.org>
Date: Fri May 11 23:41:50 2018

Add audio::StreamFactory::CreateLoopbackStream() API.

Adds the mojom declaration and its corresponding audio::StreamFactory
implementation, allowing clients of the Audio Service to create loopback
streams. Loopback streams are virtualized audio input streams. They
collect the audio from one or more audio output streams, and mix it
together into a single input stream. An example use case is tab capture.

Bug:  824019 
Change-Id: I10256b516f7e19f6e312aec7fd33dc737df095fa
Reviewed-on: https://chromium-review.googlesource.com/1041662
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Reviewed-by: Yuri Wiitala <miu@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Reviewed-by: Max Morin <maxmorin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#558061}
[modify] https://crrev.com/79723068d858620d5aebb9baa675bf5feaa93a2d/services/audio/public/cpp/fake_stream_factory.h
[modify] https://crrev.com/79723068d858620d5aebb9baa675bf5feaa93a2d/services/audio/public/cpp/input_ipc_unittest.cc
[modify] https://crrev.com/79723068d858620d5aebb9baa675bf5feaa93a2d/services/audio/public/mojom/stream_factory.mojom
[modify] https://crrev.com/79723068d858620d5aebb9baa675bf5feaa93a2d/services/audio/stream_factory.cc
[modify] https://crrev.com/79723068d858620d5aebb9baa675bf5feaa93a2d/services/audio/stream_factory.h

Project Member

Comment 19 by bugdroid1@chromium.org, May 15 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2ebc174f76e39335d9ca86224bed7be3e8cfc061

commit 2ebc174f76e39335d9ca86224bed7be3e8cfc061
Author: Olga Sharonova <olka@chromium.org>
Date: Tue May 15 12:39:19 2018

Loopback and muting in the forwarding factory

Muting:
* There is an AudioSessionMuter class which manages muting for a group.
* InputStreamBroker has one in case source should be muted.
* ForwardingFactory also has one if webcontents should be muted.

Bug:  824019 
Change-Id: I41c26e8de38912f9dac1409ff9dba86cd43631ea
Reviewed-on: https://chromium-review.googlesource.com/1046052
Commit-Queue: Olga Sharonova <olka@chromium.org>
Reviewed-by: Max Morin <maxmorin@chromium.org>
Reviewed-by: Nasko Oskov <nasko@chromium.org>
Reviewed-by: Yuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#558671}
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/BUILD.gn
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_input_stream_broker_unittest.cc
[add] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_loopback_stream_broker.cc
[add] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_loopback_stream_broker.h
[add] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_loopback_stream_broker_unittest.cc
[add] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_muting_session.cc
[add] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_muting_session.h
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_output_stream_broker_unittest.cc
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_stream_broker.cc
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/audio_stream_broker.h
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/forwarding_audio_stream_factory.cc
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/forwarding_audio_stream_factory.h
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/browser/media/forwarding_audio_stream_factory_unittest.cc
[modify] https://crrev.com/2ebc174f76e39335d9ca86224bed7be3e8cfc061/content/test/BUILD.gn

Project Member

Comment 20 by bugdroid1@chromium.org, May 15 2018

Project Member

Comment 21 by bugdroid1@chromium.org, May 16 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b5506f796e9a13e88c5824ef1e6f8c4afe16b975

commit b5506f796e9a13e88c5824ef1e6f8c4afe16b975
Author: Max Morin <maxmorin@chromium.org>
Date: Wed May 16 07:33:10 2018

Wire up tab muting for audio service.

When using the audio service for audio streams,
WebContentsImpl::SetAudioMuted must mute the streams by calling
the audio service, rather than using the (currently used)
WebContentsAudioMuter. This CL updates WebContentsImpl to
communicate with the audio service when
features::kAudioServiceAudioStreams is set, and also removes an old
hack used for muting when the audio service is in-process.

Bug:  824019 
Change-Id: Idbe29f0edc6fd0f68287ad6254021969916a38d6
Reviewed-on: https://chromium-review.googlesource.com/1059953
Commit-Queue: Max Morin <maxmorin@chromium.org>
Reviewed-by: Olga Sharonova <olka@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#559007}
[modify] https://crrev.com/b5506f796e9a13e88c5824ef1e6f8c4afe16b975/content/browser/media/forwarding_audio_stream_factory.cc
[modify] https://crrev.com/b5506f796e9a13e88c5824ef1e6f8c4afe16b975/content/browser/web_contents/web_contents_impl.cc

Project Member

Comment 22 by bugdroid1@chromium.org, May 17 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a3bd958dc2cf2a726126eaa5420bbdb3afd281aa

commit a3bd958dc2cf2a726126eaa5420bbdb3afd281aa
Author: Yuri Wiitala <miu@chromium.org>
Date: Thu May 17 23:14:41 2018

Fix 'forced tab unmute' behavior when using OOP Audio Service

The new Audio Service uses separate infrastructure for muting and tab
capture. The legacy implementation, however, did not; and there was some
logic in chrome/browser/ui/tab_utils.cc mitigating that. This change
conditionally allows the mute state of a tab to be toggled/updated
independently of tab capture. It also adds TODOs to mark the logic that
should be deleted once the Audio Service launches.

Bug:  843103 , 824019 ,672469
Change-Id: Ie21f4895717b5769808b87676f723a9ed5a30af4
Reviewed-on: https://chromium-review.googlesource.com/1065065
Reviewed-by: Xiangjun Zhang <xjz@chromium.org>
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#559727}
[modify] https://crrev.com/a3bd958dc2cf2a726126eaa5420bbdb3afd281aa/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
[modify] https://crrev.com/a3bd958dc2cf2a726126eaa5420bbdb3afd281aa/chrome/browser/ui/tabs/tab_utils.cc
[modify] https://crrev.com/a3bd958dc2cf2a726126eaa5420bbdb3afd281aa/chrome/test/data/extensions/api_test/tab_capture/api_tests.js

Project Member

Comment 23 by bugdroid1@chromium.org, May 18 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9c6ea194b927f76ed9d439531b83e036ea9ab287

commit 9c6ea194b927f76ed9d439531b83e036ea9ab287
Author: Yuri Wiitala <miu@chromium.org>
Date: Fri May 18 10:17:11 2018

Add trace events to Audio Service loopback stream.

Bug:  824019 
Change-Id: I94b9c87a355c9abe5064af0c7b73d7bf23e5a1bb
Reviewed-on: https://chromium-review.googlesource.com/1063371
Reviewed-by: Max Morin <maxmorin@chromium.org>
Commit-Queue: Yuri Wiitala <miu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#559855}
[modify] https://crrev.com/9c6ea194b927f76ed9d439531b83e036ea9ab287/services/audio/loopback_stream.cc
[modify] https://crrev.com/9c6ea194b927f76ed9d439531b83e036ea9ab287/services/audio/snooper_node.cc

Comment 24 by m...@chromium.org, May 19 2018

At this point, the new implementation is in-place and [believed to be] working.

From here, we'll wait until the AudioServiceAudioStreams feature is launched, and then remove all the old legacy code. Also, we'd like to look into a future improvement in the audio transfer between processes (see bug 844823); but, to reduce churn, this work shouldn't start until the Audio Service is stable and fully-launched.

Comment 25 by m...@chromium.org, May 19 2018

Status: Fixed (was: Started)
Actually, this is fixed since all remaining "loose ends" are being tracked by follow-ups: bug 843349 and bug 844823

Sign in to add a comment