[Mesa-dev] [PATCH] mesa/glthread: Avoid unnecessary batch reallocation

Bartosz Tomczyk bartosz.tomczyk86 at gmail.com
Mon Apr 3 18:53:41 UTC 2017


Actually, I can just set only batch->used to 0, but it seems to error
prone. When someone adds some fields to batch struct, it will be easy to
miss that it should be initialized in glthread_unmarshal_batch.

Anyway I can change it if you want to.

On Mon, Apr 3, 2017 at 8:42 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:

> On 03.04.2017 20:38, Bartosz Tomczyk wrote:
>
>> ---
>>  src/mesa/main/glthread.c | 15 +++++++++------
>>  1 file changed, 9 insertions(+), 6 deletions(-)
>>
>> diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c
>> index 3f07c420d4..aa14292e59 100644
>> --- a/src/mesa/main/glthread.c
>> +++ b/src/mesa/main/glthread.c
>> @@ -53,7 +53,8 @@ glthread_allocate_batch(struct gl_context *ctx)
>>  }
>>
>>  static void
>> -glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch
>> *batch)
>> +glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch
>> *batch,
>> +                         const bool release_batch)
>>  {
>>     size_t pos = 0;
>>
>> @@ -64,7 +65,10 @@ glthread_unmarshal_batch(struct gl_context *ctx,
>> struct glthread_batch *batch)
>>
>>     assert(pos == batch->used);
>>
>> -   free(batch);
>> +   if (release_batch)
>> +      free(batch);
>> +   else
>> +      memset(batch, 0, offsetof(struct glthread_batch, buffer));
>>
>
> Hmm. Why do we memset the batch? Seems like a trivial optimization to just
> not do that...
>
> Apart from that, the patch looks good to me.
>
> Cheers,
> Nicolai
>
>
>
>  }
>>
>>  static void *
>> @@ -103,7 +107,7 @@ glthread_worker(void *data)
>>        glthread->busy = true;
>>        pthread_mutex_unlock(&glthread->mutex);
>>
>> -      glthread_unmarshal_batch(ctx, batch);
>> +      glthread_unmarshal_batch(ctx, batch, true);
>>
>>        pthread_mutex_lock(&glthread->mutex);
>>        glthread->busy = false;
>> @@ -214,7 +218,7 @@ _mesa_glthread_flush_batch_locked(struct gl_context
>> *ctx)
>>      * need to restore it when it returns.
>>      */
>>     if (false) {
>> -      glthread_unmarshal_batch(ctx, batch);
>> +      glthread_unmarshal_batch(ctx, batch, true);
>>        _glapi_set_dispatch(ctx->CurrentClientDispatch);
>>        return;
>>     }
>> @@ -269,9 +273,8 @@ _mesa_glthread_finish(struct gl_context *ctx)
>>     if (!(glthread->batch_queue || glthread->busy)) {
>>        if (glthread->batch && glthread->batch->used) {
>>           struct _glapi_table *dispatch = _glapi_get_dispatch();
>> -         glthread_unmarshal_batch(ctx, glthread->batch);
>> +         glthread_unmarshal_batch(ctx, glthread->batch, false);
>>           _glapi_set_dispatch(dispatch);
>> -         glthread_allocate_batch(ctx);
>>        }
>>     } else {
>>        _mesa_glthread_flush_batch_locked(ctx);
>>
>>
>
> --
> Lerne, wie die Welt wirklich ist,
> Aber vergiss niemals, wie sie sein sollte.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170403/05c5aaf6/attachment.html>


More information about the mesa-dev mailing list