tstCompressionBenchmark.cpp revision a9d893999c866903a9b29cea4ba4f9a0a64bb65d
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync/* $Id$ */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync/** @file
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Compression Benchmark for SSM.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync/*
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Copyright (C) 2009 Sun Microsystems, Inc.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync *
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * available from http://www.virtualbox.org. This file is free software;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * General Public License (GPL) as published by the Free Software
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync *
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * additional information or have any questions.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync/*******************************************************************************
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync* Header Files *
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync*******************************************************************************/
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/assert.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/ctype.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/err.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/file.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/getopt.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/initterm.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/mem.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/param.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/stream.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/string.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/time.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync#include <iprt/zip.h>
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync/*******************************************************************************
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync* Global Variables *
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync*******************************************************************************/
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsyncstatic size_t g_cPages = 20*_1M / PAGE_SIZE;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsyncstatic uint8_t *g_pabSrc;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsyncstatic uint8_t *g_pabDecompr;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsyncstatic size_t g_cbCompr;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsyncstatic uint8_t *g_pabCompr;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsyncstatic DECLCALLBACK(int) ComprOutCallback(void *pvUser, const void *pvBuf, size_t cbBuf)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync{
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return VERR_NOT_IMPLEMENTED;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync}
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync/** Prints an error message and returns 1 for quick return from main use. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsyncstatic int Error(const char *pszMsgFmt, ...)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync{
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTStrmPrintf(g_pStdErr, "error: ");
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync va_list va;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync va_start(va, pszMsgFmt);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTStrmPrintfV(g_pStdErr, pszMsgFmt, va);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync va_end(va);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return 1;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync}
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsyncint main(int argc, char **argv)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync{
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTR3Init();
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /*
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Parse arguments.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync static const RTGETOPTDEF s_aOptions[] =
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync { "--interations", 'i', RTGETOPT_REQ_UINT32 },
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync { "--num-pages", 'n', RTGETOPT_REQ_UINT32 },
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync { "--page-file", 'f', RTGETOPT_REQ_STRING },
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync };
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync const char *pszPageFile = NULL;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint32_t cIterations = 1;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTGETOPTUNION Val;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTGETOPTSTATE State;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync int rc = RTGetOptInit(&State, argc, argv, &s_aOptions[0], RT_ELEMENTS(s_aOptions), 1, 0);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync AssertRCReturn(rc, 1);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync while ((rc = RTGetOpt(&State, &Val)))
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync switch (rc)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync case 'n':
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync g_cPages = Val.u32;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (g_cPages * PAGE_SHIFT * 8 / (PAGE_SIZE * 8) != g_cPages)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return Error("The specified page count is too high: %#x\n", g_cPages);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (g_cPages < 1)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return Error("The specified page count is too low: %#x\n", g_cPages);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync break;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync case 'i':
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync cIterations = Val.u32;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (cIterations < 1)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return Error("The number of iterations must be 1 or higher\n");
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync break;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync case 'f':
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync pszPageFile = Val.psz;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync break;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync default:
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (rc > 0)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (RT_C_IS_GRAPH(rc))
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync Error("unhandled option: -%c\n", rc);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync else
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync Error("unhandled option: %d\n", rc);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync else if (rc == VERR_GETOPT_UNKNOWN_OPTION)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync Error("unknown option: %s\n", Val.psz);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync else if (rc == VINF_GETOPT_NOT_OPTION)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync Error("unknown argument: %s\n", Val.psz);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync else if (Val.pDef)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync Error("%s: %Rrs\n", Val.pDef->pszLong, rc);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync else
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync Error("%Rrs\n", rc);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return 1;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /*
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Gather the test memory.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (pszPageFile)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync size_t cbFile;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync rc = RTFileReadAllEx(pszPageFile, 0, g_cPages * PAGE_SIZE, RTFILE_RDALL_O_DENY_NONE, (void **)&g_pabSrc, &cbFile);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (RT_FAILURE(rc))
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return Error("Error reading %zu bytes from %s: %Rrc\n", g_cPages * PAGE_SIZE, pszPageFile, rc);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (cbFile != g_cPages * PAGE_SIZE)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return Error("Error reading %zu bytes from %s: got %zu bytes\n", g_cPages * PAGE_SIZE, pszPageFile, cbFile);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync else
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync g_pabSrc = (uint8_t *)RTMemAlloc(g_cPages * PAGE_SIZE);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (g_pabSrc)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /* just fill it with something. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint8_t *pb = g_pabSrc;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint8_t *pbEnd = &g_pabSrc[g_cPages * PAGE_SIZE];
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync for (; pb != pbEnd; pb += 16)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync char szTmp[17];
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTStrPrintf(szTmp, sizeof(szTmp), "aaaa%08Xzzzz", (uint32_t)(uintptr_t)pb);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync memcpy(pb, szTmp, 16);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync g_pabDecompr = (uint8_t *)RTMemAlloc(g_cPages * PAGE_SIZE);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync g_cbCompr = g_cPages * PAGE_SIZE * 2;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync g_pabCompr = (uint8_t *)RTMemAlloc(g_cbCompr);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (!g_pabSrc || !g_pabDecompr || !g_pabCompr)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return Error("failed to allocate memory buffers (g_cPages=%#x)\n", g_cPages);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /*
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Double loop compressing and uncompressing the data, where the outer does
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * the specified number of interations while the inner applies the different
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * compression algorithms.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync struct
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /** The time spent decompressing. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint64_t cNanoDecompr;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /** The time spent compressing. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint64_t cNanoCompr;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /** The size of the compressed data. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint64_t cbCompr;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /** Number of errrors. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint32_t cErrors;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /** Compresstion type. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTZIPTYPE enmType;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /** Compresison level. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTZIPLEVEL enmLevel;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /** Method name. */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync const char *pszName;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync } aTests[] =
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync { 0, 0, 0, 0, RTZIPTYPE_LZF, RTZIPLEVEL_DEFAULT, "RTZip/LZF" }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync };
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync for (uint32_t i = 0; i < cIterations; i++)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync for (uint32_t j = 0; j < RT_ELEMENTS(aTests); j++)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync memset(g_pabCompr, 0, g_cbCompr);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync memset(g_pabDecompr, 0, g_cPages * PAGE_SIZE);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /*
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Compress it.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync PRTZIPCOMP pZip;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync rc = RTZipCompCreate(&pZip, NULL, ComprOutCallback, aTests[j].enmType, aTests[j].enmLevel);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (RT_FAILURE(rc))
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync Error("Failed to create compressor for '%s' (#%u): %Rrc\n", aTests[j].pszName, j, rc);
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync aTests[j].cErrors++;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync continue;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint8_t const *pbPage = &g_pabSrc[0];
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync size_t cLeft = g_cPages;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync uint64_t NanoTS = RTTimeNanoTS();
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync while (cLeft-- > 0)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync pbPage += PAGE_SIZE;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync NanoTS = RTTimeNanoTS() - NanoTS;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync /*
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync * Report the results.
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync */
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTPrintf("tstCompressionBenchmark: BEGIN RESULTS\n");
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync rc = 0;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync for (uint32_t j = 0; j < RT_ELEMENTS(aTests); j++)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync {
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTPrintf("\n");
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync if (aTests[j].cErrors)
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync rc = 1;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync }
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync RTPrintf("tstCompressionBenchmark: END RESULTS\n");
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync return rc;
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync}
a9d893999c866903a9b29cea4ba4f9a0a64bb65dvboxsync