[FFmpeg-devel] [PATCH] lavu: add ff_pthread_setname() and use it in various places
Clément Bœsch
u at pkh.me
Wed Jan 20 23:11:35 CET 2016
---
Changes:
- < 16 char length
- no spaces
- ff_pthread_setname → ff_thread_setname
- changed ifdefery protection
bonus: http://ubitux.fr/pub/pics/ffthreads.png
---
libavcodec/frame_thread_encoder.c | 2 ++
libavcodec/pthread_frame.c | 2 ++
libavcodec/pthread_slice.c | 2 ++
libavfilter/pthread.c | 2 ++
libavformat/async.c | 2 ++
libavformat/udp.c | 3 +++
libavutil/thread.h | 11 +++++++++++
7 files changed, 24 insertions(+)
diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c
index f4d35f9..87570a4 100644
--- a/libavcodec/frame_thread_encoder.c
+++ b/libavcodec/frame_thread_encoder.c
@@ -62,6 +62,8 @@ static void * attribute_align_arg worker(void *v){
ThreadContext *c = avctx->internal->frame_thread_encoder;
AVPacket *pkt = NULL;
+ ff_thread_setname("lavc-frame-enc");
+
while(!c->exit){
int got_packet, ret;
AVFrame *frame;
diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
index b77dd1e..6374d7c 100644
--- a/libavcodec/pthread_frame.c
+++ b/libavcodec/pthread_frame.c
@@ -132,6 +132,8 @@ static attribute_align_arg void *frame_worker_thread(void *arg)
AVCodecContext *avctx = p->avctx;
const AVCodec *codec = avctx->codec;
+ ff_thread_setname("lavc-frame");
+
pthread_mutex_lock(&p->mutex);
while (1) {
while (p->state == STATE_INPUT_READY && !fctx->die)
diff --git a/libavcodec/pthread_slice.c b/libavcodec/pthread_slice.c
index 3ba5c66..25658e6 100644
--- a/libavcodec/pthread_slice.c
+++ b/libavcodec/pthread_slice.c
@@ -70,6 +70,8 @@ static void* attribute_align_arg worker(void *v)
int thread_count = avctx->thread_count;
int self_id;
+ ff_thread_setname("lavc-slice");
+
pthread_mutex_lock(&c->current_job_lock);
self_id = c->current_job++;
for (;;){
diff --git a/libavfilter/pthread.c b/libavfilter/pthread.c
index 1c54193..53d4c74 100644
--- a/libavfilter/pthread.c
+++ b/libavfilter/pthread.c
@@ -63,6 +63,8 @@ static void* attribute_align_arg worker(void *v)
unsigned int last_execute = 0;
int self_id;
+ ff_thread_setname("lavfi-worker");
+
pthread_mutex_lock(&c->current_job_lock);
self_id = c->current_job++;
for (;;) {
diff --git a/libavformat/async.c b/libavformat/async.c
index 4308c4b..9f4d553 100644
--- a/libavformat/async.c
+++ b/libavformat/async.c
@@ -181,6 +181,8 @@ static void *async_buffer_task(void *arg)
int ret = 0;
int64_t seek_ret;
+ ff_thread_setname("lavf-async-buf");
+
while (1) {
int fifo_space, to_copy;
diff --git a/libavformat/udp.c b/libavformat/udp.c
index ea80e52..e053a91 100644
--- a/libavformat/udp.c
+++ b/libavformat/udp.c
@@ -35,6 +35,7 @@
#include "libavutil/avstring.h"
#include "libavutil/opt.h"
#include "libavutil/log.h"
+#include "libavutil/thread.h"
#include "libavutil/time.h"
#include "internal.h"
#include "network.h"
@@ -492,6 +493,8 @@ static void *circular_buffer_task( void *_URLContext)
UDPContext *s = h->priv_data;
int old_cancelstate;
+ ff_thread_setname("udp-circ-buf");
+
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancelstate);
pthread_mutex_lock(&s->mutex);
if (ff_socket_nonblock(s->udp_fd, 0) < 0) {
diff --git a/libavutil/thread.h b/libavutil/thread.h
index 32ddf40..fe4153a 100644
--- a/libavutil/thread.h
+++ b/libavutil/thread.h
@@ -31,6 +31,15 @@
#if HAVE_PTHREADS
#include <pthread.h>
+static inline void ff_thread_setname(const char *name)
+{
+#if defined(__APPLE__)
+ pthread_setname_np(name);
+#elif defined(__linux__)
+ pthread_setname_np(pthread_self(), name);
+#endif
+}
+
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1
#include "log.h"
@@ -158,6 +167,8 @@ static inline int strict_pthread_once(pthread_once_t *once_control, void (*init_
#define AVOnce char
#define AV_ONCE_INIT 0
+#define ff_thread_setname(name) (0)
+
static inline int ff_thread_once(char *control, void (*routine)(void))
{
if (!*control) {
--
2.7.0
More information about the ffmpeg-devel
mailing list