diff options
author | Fletcher Woodruff <fletcherw@chromium.org> | 2019-06-25 10:48:32 -0600 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-07-16 22:34:34 -0700 |
commit | 6afc403abc461fceaf35893b6e57ccec326dcea8 (patch) | |
tree | a32ea271739c361876ec9928939b9afa3bf2adab | |
parent | 7897a4221914806d72b3f69c3b958511f3db87e2 (diff) | |
download | adhd-6afc403abc461fceaf35893b6e57ccec326dcea8.tar.gz |
CRAS: remove legacy unsplit shm
Now that ARC++ has been upreved to use a split shm for audio, we can
remove the legacy compatibility code.
BUG=chromium:968724
TEST=playback test in ARC
Change-Id: If929d010429e33a05495348f8d62b21f1df511ab
Reviewed-on: https://chromium-review.googlesource.com/1679237
Tested-by: Fletcher Woodruff <fletcherw@chromium.org>
Commit-Ready: Fletcher Woodruff <fletcherw@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org>
-rw-r--r-- | cras/src/common/cras_shm.c | 59 | ||||
-rw-r--r-- | cras/src/common/cras_shm.h | 18 | ||||
-rw-r--r-- | cras/src/server/cras_control_rclient.c | 34 | ||||
-rw-r--r-- | cras/src/server/cras_rstream.c | 48 | ||||
-rw-r--r-- | cras/src/server/cras_rstream.h | 5 |
5 files changed, 11 insertions, 153 deletions
diff --git a/cras/src/common/cras_shm.c b/cras/src/common/cras_shm.c index 7d1d5261..95a35390 100644 --- a/cras/src/common/cras_shm.c +++ b/cras/src/common/cras_shm.c @@ -154,68 +154,13 @@ cleanup_info: return ret; } -// TODO(fletcherw) remove once libcras in ARC++ has been upreved -int cras_audio_unsplit_shm_create(struct cras_shm_info *shm_info, - struct cras_audio_shm **shm_out) -{ - struct cras_audio_shm *shm; - int ret; - - if (!shm_info || !shm_out) { - ret = -EINVAL; - goto cleanup_info; - } - - shm = calloc(1, sizeof(*shm)); - if (!shm) { - ret = -ENOMEM; - goto cleanup_info; - } - /* Move the shm info param into the new cras_audio_shm object. - * shm_info is cleared, and the owner of cras_audio_shm is now - * responsible for closing the fd and unlinking any associated shm - * file using cras_audio_shm_destroy. - */ - ret = cras_shm_info_move(shm_info, &shm->header_info); - if (ret) - goto free_shm; - - shm->header = - mmap(NULL, shm->header_info.length, PROT_READ | PROT_WRITE, - MAP_SHARED, shm->header_info.fd, 0); - if (shm->header == (struct cras_audio_shm_header *)-1) { - ret = errno; - syslog(LOG_ERR, "cras_shm: mmap failed to map shm for header."); - goto free_shm; - } - - // Point the samples pointer in shm into the header shm area so that - // the legacy unsplit shm can share code with the new split shm. - shm->samples = shm->header->samples; - - cras_shm_set_volume_scaler(shm, 1.0); - - *shm_out = shm; - return 0; - -free_shm: - free(shm); -cleanup_info: - cras_shm_info_cleanup(shm_info); - return ret; -} - void cras_audio_shm_destroy(struct cras_audio_shm *shm) { if (!shm) return; - // Calls munmap only for split version shm. - // TODO(paulhsia): Remove this check after cleanup unsplit shm. - if (shm->samples_info.length > 0) { - munmap(shm->samples, shm->samples_info.length); - cras_shm_info_cleanup(&shm->samples_info); - } + munmap(shm->samples, shm->samples_info.length); + cras_shm_info_cleanup(&shm->samples_info); munmap(shm->header, shm->header_info.length); cras_shm_info_cleanup(&shm->header_info); free(shm); diff --git a/cras/src/common/cras_shm.h b/cras/src/common/cras_shm.h index ee80208b..423b8d52 100644 --- a/cras/src/common/cras_shm.h +++ b/cras/src/common/cras_shm.h @@ -43,10 +43,6 @@ struct __attribute__ ((__packed__)) cras_audio_shm_config { * ts - For capture, the time stamp of the next sample at read_index. For * playback, this is the time that the next sample written will be played. * This is only valid in audio callbacks. - * - * TODO(fletcherw) remove once libcras in ARC++ has been upreved - * samples - Audio data - a double buffered area that is used to exchange - * audio samples. */ struct __attribute__((__packed__)) cras_audio_shm_header { struct cras_audio_shm_config config; @@ -60,7 +56,6 @@ struct __attribute__((__packed__)) cras_audio_shm_header { int32_t callback_pending; uint32_t num_overruns; struct cras_timespec ts; - uint8_t samples[]; }; /* Returns the number of bytes needed to hold a cras_audio_shm_header. */ @@ -144,25 +139,12 @@ struct cras_audio_shm { * The samples_info parameter will be returned to an * uninitialized state, and the client need not call * cras_shm_info_destroy. - * This parameter may be NULL. In that case, no shared memory will - * be mapped for the samples. * shm_out - pointer where the created cras_audio_shm will be stored. */ int cras_audio_shm_create(struct cras_shm_info *header_info, struct cras_shm_info *samples_info, struct cras_audio_shm **shm_out); -/* Sets up a legacy cras_audio_shm given info about the shared memory to use - * - * shm_info - the underlying shm area to use for the audio shm. The shm - * will be managed by the created cras_audio_shm object. - * The shm_info parameter will be returned to an uninitialized - * state, and the client need not call cras_shm_info_destroy. - * shm_out - pointer where the created cras_audio_shm will be stored. - */ -int cras_audio_unsplit_shm_create(struct cras_shm_info *shm_info, - struct cras_audio_shm **shm_out); - /* Destroys a cras_audio_shm returned from cras_audio_shm_create. * * shm - the cras_audio_shm to destroy. diff --git a/cras/src/server/cras_control_rclient.c b/cras/src/server/cras_control_rclient.c index 61f4df58..20e95d1f 100644 --- a/cras/src/server/cras_control_rclient.c +++ b/cras/src/server/cras_control_rclient.c @@ -61,7 +61,6 @@ static int handle_client_stream_connect(struct cras_rclient *client, stream_config.cb_threshold = msg->cb_threshold; stream_config.audio_fd = aud_fd; stream_config.client = client; - stream_config.use_split_shm = msg->proto_version > 2; rc = stream_list_add(cras_iodev_list_get_stream_list(), &stream_config, &stream); if (rc) @@ -69,36 +68,19 @@ static int handle_client_stream_connect(struct cras_rclient *client, /* Tell client about the stream setup. */ syslog(LOG_DEBUG, "Send connected for stream %x\n", msg->stream_id); - if (stream_config.use_split_shm) { - cras_fill_client_stream_connected( - &stream_connected, 0, /* No error. */ - msg->stream_id, &remote_fmt, - cras_rstream_get_samples_shm_size(stream), - cras_rstream_get_effects(stream)); - reply = &stream_connected.header; - - } else { - cras_fill_client_stream_connected( - &stream_connected, 0, /* No error. */ - msg->stream_id, &remote_fmt, - cras_rstream_get_samples_shm_size(stream) + - cras_shm_header_size(), - cras_rstream_get_effects(stream)); - reply = &stream_connected.header; - } + cras_fill_client_stream_connected( + &stream_connected, 0, /* No error. */ + msg->stream_id, &remote_fmt, + cras_rstream_get_samples_shm_size(stream), + cras_rstream_get_effects(stream)); + reply = &stream_connected.header; rc = cras_rstream_get_shm_fds(stream, &header_fd, &samples_fd); if (rc) goto reply_err; - if (stream_config.use_split_shm) { - stream_fds[0] = header_fd; - stream_fds[1] = samples_fd; - } else { - // for unsplit shm, the client expects both fds to be the same. - stream_fds[0] = header_fd; - stream_fds[1] = header_fd; - } + stream_fds[0] = header_fd; + stream_fds[1] = samples_fd; rc = client->ops->send_message_to_client(client, reply, stream_fds, 2); if (rc < 0) { diff --git a/cras/src/server/cras_rstream.c b/cras/src/server/cras_rstream.c index 12a6f83e..03871818 100644 --- a/cras/src/server/cras_rstream.c +++ b/cras/src/server/cras_rstream.c @@ -70,48 +70,6 @@ static inline int setup_shm_area(struct cras_rstream *stream) return 0; } -/* Setup a legacy unsplit shared memory area for audio samples. - * Will be removed once ARC++ transitions to a split shm */ -static inline int setup_unsplit_shm_area(struct cras_rstream *stream) -{ - const struct cras_audio_format *fmt = &stream->format; - char stream_name[NAME_MAX]; - struct cras_shm_info shm_info; - uint32_t frame_bytes, used_size; - int rc; - - if (stream->shm) /* already setup */ - return -EEXIST; - - snprintf(stream_name, sizeof(stream_name), "/cras-%d-stream-%08x", - getpid(), stream->stream_id); - - frame_bytes = snd_pcm_format_physical_width(fmt->format) / 8 * - fmt->num_channels; - used_size = stream->buffer_frames * frame_bytes; - - rc = cras_shm_info_init( - stream_name, - cras_shm_header_size() + - cras_shm_calculate_samples_size(used_size), - &shm_info); - if (rc) - return rc; - - rc = cras_audio_unsplit_shm_create(&shm_info, &stream->shm); - if (rc) - return rc; - - cras_shm_set_frame_bytes(stream->shm, frame_bytes); - cras_shm_set_used_size(stream->shm, used_size); - - stream->audio_area = - cras_audio_area_create(stream->format.num_channels); - cras_audio_area_config_channels(stream->audio_area, &stream->format); - - return 0; -} - static inline int buffer_meets_size_limit(size_t buffer_size, size_t rate) { return buffer_size > (CRAS_MIN_BUFFER_TIME_IN_US * rate) / 1000000; @@ -277,11 +235,7 @@ int cras_rstream_create(struct cras_rstream_config *config, stream->pinned_dev_idx = config->dev_idx; stream->fd = config->audio_fd; - if (config->use_split_shm) { - rc = setup_shm_area(stream); - } else { - rc = setup_unsplit_shm_area(stream); - } + rc = setup_shm_area(stream); if (rc < 0) { syslog(LOG_ERR, "failed to setup shm %d\n", rc); free(stream); diff --git a/cras/src/server/cras_rstream.h b/cras/src/server/cras_rstream.h index d8919299..609e3da0 100644 --- a/cras/src/server/cras_rstream.h +++ b/cras/src/server/cras_rstream.h @@ -100,10 +100,6 @@ struct cras_rstream { * cb_threshold - # of frames when to request more from the client. * audio_fd - The fd to read/write audio signals to. * client - The client that owns this stream. - * - * TODO(fletcherw) remove once libcras in ARC++ has been upreved - * use_split_shm - Should this stream use the new split shm area. - * Will be removed after all clients transition to split shm. */ struct cras_rstream_config { cras_stream_id_t stream_id; @@ -117,7 +113,6 @@ struct cras_rstream_config { size_t cb_threshold; int audio_fd; struct cras_rclient *client; - int use_split_shm; }; /* Creates an rstream. |