On Mon, Mar 13, 2017 at 12:31 AM, Timothy Arceri <tarc...@itsqueeze.com> wrote: > On 13/03/17 05:32, Grazvydas Ignotas wrote: >> >> This is useful when we need to compute many hashes which all have some >> common data hashed in. It works by first hashing the common data and >> keeping the context, then for each hashing operation clone the common >> context and continue hashing from there. > > > Is this actually anymore performant? Can we have some numbers to go with it? > Otherwise I'm not sure its worth the added complexity.
Is a single malloc+memcpy pair really such bad complexity? I doubt it has much effect on performance. For me carrying around all the stuff that needs to be hashed into the keys (or preparing a blob) looks more messy, but I can change to that if you insist. GraÅžvydas > > > >> >> Signed-off-by: Grazvydas Ignotas <nota...@gmail.com> >> --- >> src/util/mesa-sha1.c | 13 +++++++++++++ >> src/util/mesa-sha1.h | 3 +++ >> 2 files changed, 16 insertions(+) >> >> diff --git a/src/util/mesa-sha1.c b/src/util/mesa-sha1.c >> index e8f1bad..2c47465 100644 >> --- a/src/util/mesa-sha1.c >> +++ b/src/util/mesa-sha1.c >> @@ -24,6 +24,7 @@ >> * DEALINGS IN THE SOFTWARE. >> */ >> >> +#include <string.h> >> #include "sha1/sha1.h" >> #include "mesa-sha1.h" >> >> @@ -39,6 +40,18 @@ _mesa_sha1_init(void) >> return (struct mesa_sha1 *) ctx; >> } >> >> +struct mesa_sha1 * >> +_mesa_sha1_clone(const struct mesa_sha1 *ctx) >> +{ >> + SHA1_CTX *ctx_clone = malloc(sizeof(*ctx_clone)); >> + >> + if (!ctx_clone) >> + return NULL; >> + >> + memcpy(ctx_clone, ctx, sizeof(*ctx_clone)); >> + return (struct mesa_sha1 *) ctx_clone; >> +} >> + >> int >> _mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size) >> { >> diff --git a/src/util/mesa-sha1.h b/src/util/mesa-sha1.h >> index 0be5485..07ca71e 100644 >> --- a/src/util/mesa-sha1.h >> +++ b/src/util/mesa-sha1.h >> @@ -34,6 +34,9 @@ struct mesa_sha1; >> struct mesa_sha1 * >> _mesa_sha1_init(void); >> >> +struct mesa_sha1 * >> +_mesa_sha1_clone(const struct mesa_sha1 *ctx); >> + >> int >> _mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size); >> >> > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev