diff options
author | thegeorg <thegeorg@yandex-team.ru> | 2022-02-10 16:45:08 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:08 +0300 |
commit | 4e839db24a3bbc9f1c610c43d6faaaa99824dcca (patch) | |
tree | 506dac10f5df94fab310584ee51b24fc5a081c22 /contrib/libs/zstd/programs/zstdcli_trace.c | |
parent | 2d37894b1b037cf24231090eda8589bbb44fb6fc (diff) | |
download | ydb-4e839db24a3bbc9f1c610c43d6faaaa99824dcca.tar.gz |
Restoring authorship annotation for <thegeorg@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/zstd/programs/zstdcli_trace.c')
-rw-r--r-- | contrib/libs/zstd/programs/zstdcli_trace.c | 344 |
1 files changed, 172 insertions, 172 deletions
diff --git a/contrib/libs/zstd/programs/zstdcli_trace.c b/contrib/libs/zstd/programs/zstdcli_trace.c index b3b977feb5..8847839949 100644 --- a/contrib/libs/zstd/programs/zstdcli_trace.c +++ b/contrib/libs/zstd/programs/zstdcli_trace.c @@ -1,172 +1,172 @@ -/* - * Copyright (c) Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#include "zstdcli_trace.h" - -#include <stdio.h> -#include <stdlib.h> - -#include "timefn.h" -#include "util.h" - -#define ZSTD_STATIC_LINKING_ONLY -#include "../lib/zstd.h" -/* We depend on the trace header to avoid duplicating the ZSTD_trace struct. - * But, we check the version so it is compatible with dynamic linking. - */ -#include "../lib/common/zstd_trace.h" -/* We only use macros from threading.h so it is compatible with dynamic linking */ -#include "../lib/common/threading.h" - -#if ZSTD_TRACE - -static FILE* g_traceFile = NULL; -static int g_mutexInit = 0; -static ZSTD_pthread_mutex_t g_mutex; -static UTIL_time_t g_enableTime = UTIL_TIME_INITIALIZER; - -void TRACE_enable(char const* filename) -{ - int const writeHeader = !UTIL_isRegularFile(filename); - if (g_traceFile) - fclose(g_traceFile); - g_traceFile = fopen(filename, "a"); - if (g_traceFile && writeHeader) { - /* Fields: - * algorithm - * version - * method - * streaming - * level - * workers - * dictionary size - * uncompressed size - * compressed size - * duration nanos - * compression ratio - * speed MB/s - */ - fprintf(g_traceFile, "Algorithm, Version, Method, Mode, Level, Workers, Dictionary Size, Uncompressed Size, Compressed Size, Duration Nanos, Compression Ratio, Speed MB/s\n"); - } - g_enableTime = UTIL_getTime(); - if (!g_mutexInit) { - if (!ZSTD_pthread_mutex_init(&g_mutex, NULL)) { - g_mutexInit = 1; - } else { - TRACE_finish(); - } - } -} - -void TRACE_finish(void) -{ - if (g_traceFile) { - fclose(g_traceFile); - } - g_traceFile = NULL; - if (g_mutexInit) { - ZSTD_pthread_mutex_destroy(&g_mutex); - g_mutexInit = 0; - } -} - -static void TRACE_log(char const* method, PTime duration, ZSTD_Trace const* trace) -{ - int level = 0; - int workers = 0; - double const ratio = (double)trace->uncompressedSize / (double)trace->compressedSize; - double const speed = ((double)trace->uncompressedSize * 1000) / (double)duration; - if (trace->params) { - ZSTD_CCtxParams_getParameter(trace->params, ZSTD_c_compressionLevel, &level); - ZSTD_CCtxParams_getParameter(trace->params, ZSTD_c_nbWorkers, &workers); - } - assert(g_traceFile != NULL); - - ZSTD_pthread_mutex_lock(&g_mutex); - /* Fields: - * algorithm - * version - * method - * streaming - * level - * workers - * dictionary size - * uncompressed size - * compressed size - * duration nanos - * compression ratio - * speed MB/s - */ - fprintf(g_traceFile, - "zstd, %u, %s, %s, %d, %d, %llu, %llu, %llu, %llu, %.2f, %.2f\n", - trace->version, - method, - trace->streaming ? "streaming" : "single-pass", - level, - workers, - (unsigned long long)trace->dictionarySize, - (unsigned long long)trace->uncompressedSize, - (unsigned long long)trace->compressedSize, - (unsigned long long)duration, - ratio, - speed); - ZSTD_pthread_mutex_unlock(&g_mutex); -} - -/** - * These symbols override the weak symbols provided by the library. - */ - -ZSTD_TraceCtx ZSTD_trace_compress_begin(ZSTD_CCtx const* cctx) -{ - (void)cctx; - if (g_traceFile == NULL) - return 0; - return (ZSTD_TraceCtx)UTIL_clockSpanNano(g_enableTime); -} - -void ZSTD_trace_compress_end(ZSTD_TraceCtx ctx, ZSTD_Trace const* trace) -{ - PTime const beginNanos = (PTime)ctx; - PTime const endNanos = UTIL_clockSpanNano(g_enableTime); - PTime const durationNanos = endNanos > beginNanos ? endNanos - beginNanos : 0; - assert(g_traceFile != NULL); - assert(trace->version == ZSTD_VERSION_NUMBER); /* CLI version must match. */ - TRACE_log("compress", durationNanos, trace); -} - -ZSTD_TraceCtx ZSTD_trace_decompress_begin(ZSTD_DCtx const* dctx) -{ - (void)dctx; - if (g_traceFile == NULL) - return 0; - return (ZSTD_TraceCtx)UTIL_clockSpanNano(g_enableTime); -} - -void ZSTD_trace_decompress_end(ZSTD_TraceCtx ctx, ZSTD_Trace const* trace) -{ - PTime const beginNanos = (PTime)ctx; - PTime const endNanos = UTIL_clockSpanNano(g_enableTime); - PTime const durationNanos = endNanos > beginNanos ? endNanos - beginNanos : 0; - assert(g_traceFile != NULL); - assert(trace->version == ZSTD_VERSION_NUMBER); /* CLI version must match. */ - TRACE_log("decompress", durationNanos, trace); -} - -#else /* ZSTD_TRACE */ - -void TRACE_enable(char const* filename) -{ - (void)filename; -} - -void TRACE_finish(void) {} - -#endif /* ZSTD_TRACE */ +/* + * Copyright (c) Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#include "zstdcli_trace.h" + +#include <stdio.h> +#include <stdlib.h> + +#include "timefn.h" +#include "util.h" + +#define ZSTD_STATIC_LINKING_ONLY +#include "../lib/zstd.h" +/* We depend on the trace header to avoid duplicating the ZSTD_trace struct. + * But, we check the version so it is compatible with dynamic linking. + */ +#include "../lib/common/zstd_trace.h" +/* We only use macros from threading.h so it is compatible with dynamic linking */ +#include "../lib/common/threading.h" + +#if ZSTD_TRACE + +static FILE* g_traceFile = NULL; +static int g_mutexInit = 0; +static ZSTD_pthread_mutex_t g_mutex; +static UTIL_time_t g_enableTime = UTIL_TIME_INITIALIZER; + +void TRACE_enable(char const* filename) +{ + int const writeHeader = !UTIL_isRegularFile(filename); + if (g_traceFile) + fclose(g_traceFile); + g_traceFile = fopen(filename, "a"); + if (g_traceFile && writeHeader) { + /* Fields: + * algorithm + * version + * method + * streaming + * level + * workers + * dictionary size + * uncompressed size + * compressed size + * duration nanos + * compression ratio + * speed MB/s + */ + fprintf(g_traceFile, "Algorithm, Version, Method, Mode, Level, Workers, Dictionary Size, Uncompressed Size, Compressed Size, Duration Nanos, Compression Ratio, Speed MB/s\n"); + } + g_enableTime = UTIL_getTime(); + if (!g_mutexInit) { + if (!ZSTD_pthread_mutex_init(&g_mutex, NULL)) { + g_mutexInit = 1; + } else { + TRACE_finish(); + } + } +} + +void TRACE_finish(void) +{ + if (g_traceFile) { + fclose(g_traceFile); + } + g_traceFile = NULL; + if (g_mutexInit) { + ZSTD_pthread_mutex_destroy(&g_mutex); + g_mutexInit = 0; + } +} + +static void TRACE_log(char const* method, PTime duration, ZSTD_Trace const* trace) +{ + int level = 0; + int workers = 0; + double const ratio = (double)trace->uncompressedSize / (double)trace->compressedSize; + double const speed = ((double)trace->uncompressedSize * 1000) / (double)duration; + if (trace->params) { + ZSTD_CCtxParams_getParameter(trace->params, ZSTD_c_compressionLevel, &level); + ZSTD_CCtxParams_getParameter(trace->params, ZSTD_c_nbWorkers, &workers); + } + assert(g_traceFile != NULL); + + ZSTD_pthread_mutex_lock(&g_mutex); + /* Fields: + * algorithm + * version + * method + * streaming + * level + * workers + * dictionary size + * uncompressed size + * compressed size + * duration nanos + * compression ratio + * speed MB/s + */ + fprintf(g_traceFile, + "zstd, %u, %s, %s, %d, %d, %llu, %llu, %llu, %llu, %.2f, %.2f\n", + trace->version, + method, + trace->streaming ? "streaming" : "single-pass", + level, + workers, + (unsigned long long)trace->dictionarySize, + (unsigned long long)trace->uncompressedSize, + (unsigned long long)trace->compressedSize, + (unsigned long long)duration, + ratio, + speed); + ZSTD_pthread_mutex_unlock(&g_mutex); +} + +/** + * These symbols override the weak symbols provided by the library. + */ + +ZSTD_TraceCtx ZSTD_trace_compress_begin(ZSTD_CCtx const* cctx) +{ + (void)cctx; + if (g_traceFile == NULL) + return 0; + return (ZSTD_TraceCtx)UTIL_clockSpanNano(g_enableTime); +} + +void ZSTD_trace_compress_end(ZSTD_TraceCtx ctx, ZSTD_Trace const* trace) +{ + PTime const beginNanos = (PTime)ctx; + PTime const endNanos = UTIL_clockSpanNano(g_enableTime); + PTime const durationNanos = endNanos > beginNanos ? endNanos - beginNanos : 0; + assert(g_traceFile != NULL); + assert(trace->version == ZSTD_VERSION_NUMBER); /* CLI version must match. */ + TRACE_log("compress", durationNanos, trace); +} + +ZSTD_TraceCtx ZSTD_trace_decompress_begin(ZSTD_DCtx const* dctx) +{ + (void)dctx; + if (g_traceFile == NULL) + return 0; + return (ZSTD_TraceCtx)UTIL_clockSpanNano(g_enableTime); +} + +void ZSTD_trace_decompress_end(ZSTD_TraceCtx ctx, ZSTD_Trace const* trace) +{ + PTime const beginNanos = (PTime)ctx; + PTime const endNanos = UTIL_clockSpanNano(g_enableTime); + PTime const durationNanos = endNanos > beginNanos ? endNanos - beginNanos : 0; + assert(g_traceFile != NULL); + assert(trace->version == ZSTD_VERSION_NUMBER); /* CLI version must match. */ + TRACE_log("decompress", durationNanos, trace); +} + +#else /* ZSTD_TRACE */ + +void TRACE_enable(char const* filename) +{ + (void)filename; +} + +void TRACE_finish(void) {} + +#endif /* ZSTD_TRACE */ |