[alsa-devel] [PATCH 00/12] ASoC: dapm: Cleanups and speed-ups
Lars-Peter Clausen
lars at metafoo.de
Mon Oct 20 19:36:32 CEST 2014
Hi,
This series contains a few cleanups and speed-ups for the DAPM
implementation. It starts with removing some dead or outdated code and
optimizing some lesser used operations.
The first larger change introduced by this series is the categorization of
widgets into sinks, sources, supplies and normal widgets. This is all the
information the main DAPM algorithm needs and using these categories makes
the code simpler and faster and hopefully easier to understand.
The second major change is to use more aggressive caching on the connected
input and output paths of a widget. It takes advantage of the fact that
typically only as subsection of the DAPM graph changes per operation. This
allows to drastically reduce the number of neighbor and path checks for some
DAPM operations. The change is most effective when the system is idle and
when changing the graph routing for a widget with multiple inputs. This e.g.
happens a lot when switching the audio profile. It still has quite good
improvements for other operations as well and typically leads to at least a
50% reduction of path and neighbor checks.
Some before and after DAPM stats. All testing was done with the ADAU1761.
Before is asoc/for-next, After~1 is asoc/for-next + this series except the
last patch, After is asoc/for-next + this series.
Changing a single control on a 5 input mixer while the system is idle:
Power Path Neighbour
Before: 2 25 32
After~1: 2 12 30
After: 2 1 2
Cumulative numbers for switching the audio profile which changes 7 controls
while the system is idle:
Power Path Neighbour
Before: 16 141 188
After~1: 16 80 170
After: 16 7 23
Cumulative numbers for switching the audio profile which changes 7 controls
while playback is active:
Power Path Neighbour
Before: 52 207 297
After~1: 51 123 273
After: 51 29 109
Starting (or stopping) the playback stream:
Power Path Neighbour
Before: 35 80 125
After~1: 34 34 117
After: 34 17 69
- Lars
Lars-Peter Clausen (12):
ASoC: dapm: Reduce number of checked paths in
dapm_widget_in_card_paths()
ASoC: dapm: Remove always true path source/sink checks
ASoC: dapm: Only mark paths dirty when the connection status changed
ASoC: dapm: Do not add un-muxed paths to MUX control
ASoC: dapm: Do not pretend to support controls for non mixer/mux
widgets
ASoC: dapm: Remove special DAI widget power check functions
ASoC: dapm: Remove path 'walked' flag
ASoC: dapm: Introduce toplevel widget categories
ASoC: dapm: Add a flag to mark paths connected to supply widgets
ASoC: dapm: Mark endpoints instead of IO widgets dirty during
suspend/resume
ASoC: dapm: Add a few supply widget sanity checks
ASoC: dapm: Use more aggressive caching
include/sound/soc-dapm.h | 9 +-
sound/soc/soc-core.c | 8 +-
sound/soc/soc-dapm.c | 755 +++++++++++++++++++++++++----------------------
3 files changed, 409 insertions(+), 363 deletions(-)
--
1.8.0
More information about the Alsa-devel
mailing list