hal: Add performance lock for playback usecase
Add performance lock during device path bringup in
playback usecase to reduce cold start output latency.
Change-Id: I2ff217beedb270f057fd4ea577a7a317ee1f20e6
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 37ef743..b30e3bc 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1128,7 +1128,9 @@
uc_info->out_snd_device = SND_DEVICE_NONE;
list_add_tail(&adev->usecase_list, &uc_info->list);
- audio_extn_perf_lock_acquire();
+ audio_extn_perf_lock_acquire(&adev->perf_lock_handle, 0,
+ adev->perf_lock_opts,
+ adev->perf_lock_opts_size);
select_devices(adev, in->usecase);
ALOGV("%s: Opening PCM device card_id(%d) device_id(%d), channels %d",
@@ -1170,16 +1172,14 @@
goto error_open;
}
- audio_extn_perf_lock_release();
-
+ audio_extn_perf_lock_release(&adev->perf_lock_handle);
ALOGD("%s: exit", __func__);
return ret;
error_open:
+ audio_extn_perf_lock_release(&adev->perf_lock_handle);
stop_input_stream(in);
- audio_extn_perf_lock_release();
-
error_config:
adev->active_input = NULL;
/*
@@ -1648,6 +1648,9 @@
}
list_add_tail(&adev->usecase_list, &uc_info->list);
+ audio_extn_perf_lock_acquire(&adev->perf_lock_handle, 0,
+ adev->perf_lock_opts,
+ adev->perf_lock_opts_size);
select_devices(adev, out->usecase);
ALOGV("%s: Opening PCM device card_id(%d) device_id(%d) format(%#x)",
@@ -1738,11 +1741,12 @@
audio_extn_check_and_set_dts_hpx_state(adev);
}
}
-
+ audio_extn_perf_lock_release(&adev->perf_lock_handle);
ALOGD("%s: exit", __func__);
return 0;
error_open:
+ audio_extn_perf_lock_release(&adev->perf_lock_handle);
stop_output_stream(out);
error_config:
/*
@@ -3665,7 +3669,6 @@
/* This stream could be for sound trigger lab,
get sound trigger pcm if present */
audio_extn_sound_trigger_check_and_get_session(in);
- audio_extn_perf_lock_init();
*stream_in = &in->stream;
ALOGV("%s: exit", __func__);
@@ -3826,6 +3829,9 @@
adev->cur_wfd_channels = 2;
adev->offload_usecases_state = 0;
adev->is_channel_status_set = false;
+ adev->perf_lock_opts[0] = 0x101;
+ adev->perf_lock_opts[1] = 0x20E;
+ adev->perf_lock_opts_size = 2;
pthread_mutex_init(&adev->snd_card_status.lock, (const pthread_mutexattr_t *) NULL);
adev->snd_card_status.state = SND_CARD_STATE_OFFLINE;
@@ -3943,6 +3949,7 @@
if (adev->adm_init)
adev->adm_data = adev->adm_init();
+ audio_extn_perf_lock_init();
ALOGV("%s: exit", __func__);
return 0;
}