mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
Expand search logging
Output results during the search; not a perfect implementation but sufficient for basic tests on zlib parameters. Signed-off-by: John Bowler <jbowler@acm.org>
This commit is contained in:
parent
8fb81acd98
commit
8498aa1c97
@ -193,6 +193,8 @@ vl_IDAT_size[] = /* for png_set_compression_buffer_size */
|
|||||||
{ "minimal", 1 },
|
{ "minimal", 1 },
|
||||||
RANGE(1, 0x7FFFFFFF)
|
RANGE(1, 0x7FFFFFFF)
|
||||||
},
|
},
|
||||||
|
#define SL 8 /* stack limit in display, below */
|
||||||
|
vl_log_depth[] = { { "on", 1 }, { "off", 0 }, RANGE(0, SL) },
|
||||||
vl_on_off[] = { { "on", 1 }, { "off", 2 } };
|
vl_on_off[] = { { "on", 1 }, { "off", 2 } };
|
||||||
|
|
||||||
#ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
|
#ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
|
||||||
@ -256,6 +258,7 @@ static const struct option
|
|||||||
VLC(level)
|
VLC(level)
|
||||||
VLC(memLevel)
|
VLC(memLevel)
|
||||||
VLO("IDAT-size", IDAT_size, 0)
|
VLO("IDAT-size", IDAT_size, 0)
|
||||||
|
VLO("log-depth", log_depth, 0)
|
||||||
|
|
||||||
# undef VLO
|
# undef VLO
|
||||||
|
|
||||||
@ -352,7 +355,6 @@ struct display
|
|||||||
* searched option; non-zero if earlier
|
* searched option; non-zero if earlier
|
||||||
* options were set on the command line.
|
* options were set on the command line.
|
||||||
*/
|
*/
|
||||||
# define SL 8 /* stack limit */
|
|
||||||
struct stack
|
struct stack
|
||||||
{
|
{
|
||||||
png_alloc_size_t best_size; /* Best so far for this option */
|
png_alloc_size_t best_size; /* Best so far for this option */
|
||||||
@ -1210,7 +1212,7 @@ getsearchopts(struct display *dp, const char *opt_str, int *value)
|
|||||||
# if 0
|
# if 0
|
||||||
(void)advance_opt(dp, opt, 0/*all*/), record=0;
|
(void)advance_opt(dp, opt, 0/*all*/), record=0;
|
||||||
# else
|
# else
|
||||||
dp->value[opt] = 9;
|
dp->value[opt] = MAX_MEM_LEVEL;
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1871,9 +1873,34 @@ better_options(const struct display *dp)
|
|||||||
assert(0 && "unreached");
|
assert(0 && "unreached");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_search_results(struct display *dp)
|
||||||
|
{
|
||||||
|
assert(dp->filename != NULL);
|
||||||
|
printf("%s [%ld x %ld %d bpp %s, %lu bytes] %lu -> %lu with '%s'\n",
|
||||||
|
dp->filename, (unsigned long)dp->w, (unsigned long)dp->h, dp->bpp,
|
||||||
|
cts(dp->ct), (unsigned long)dp->size, (unsigned long)dp->read_size,
|
||||||
|
(unsigned long)dp->best_size, dp->best);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
log_search(struct display *dp, unsigned int log_depth)
|
||||||
|
{
|
||||||
|
/* Log, and reset, the search so far: */
|
||||||
|
if (dp->nsp/*next entry to change*/ <= log_depth)
|
||||||
|
{
|
||||||
|
print_search_results(dp);
|
||||||
|
/* Start again with this entry: */
|
||||||
|
dp->best_size = MAX_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cp_one_file(struct display *dp, const char *filename, const char *destname)
|
cp_one_file(struct display *dp, const char *filename, const char *destname)
|
||||||
{
|
{
|
||||||
|
unsigned int log_depth;
|
||||||
|
|
||||||
dp->filename = filename;
|
dp->filename = filename;
|
||||||
dp->operation = "read";
|
dp->operation = "read";
|
||||||
dp->no_warnings = 0;
|
dp->no_warnings = 0;
|
||||||
@ -1891,6 +1918,17 @@ cp_one_file(struct display *dp, const char *filename, const char *destname)
|
|||||||
/* Limit the upper end of the windowBits range for this file */
|
/* Limit the upper end of the windowBits range for this file */
|
||||||
set_windowBits_hi(dp);
|
set_windowBits_hi(dp);
|
||||||
|
|
||||||
|
/* For logging, depth to log: */
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
|
||||||
|
if (getopt(dp, "log-depth", &val) && val >= 0)
|
||||||
|
log_depth = (unsigned int)/*SAFE*/val;
|
||||||
|
|
||||||
|
else
|
||||||
|
log_depth = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
if (destname != NULL) /* else stdout */
|
if (destname != NULL) /* else stdout */
|
||||||
{
|
{
|
||||||
if (isdir(dp, destname))
|
if (isdir(dp, destname))
|
||||||
@ -1914,6 +1952,7 @@ cp_one_file(struct display *dp, const char *filename, const char *destname)
|
|||||||
/* Initialize the 'best' fields: */
|
/* Initialize the 'best' fields: */
|
||||||
strcpy(dp->best, dp->curr);
|
strcpy(dp->best, dp->curr);
|
||||||
dp->best_size = dp->write_size;
|
dp->best_size = dp->write_size;
|
||||||
|
log_search(dp, log_depth);
|
||||||
|
|
||||||
if (dp->nsp > 0) /* interating over lists */
|
if (dp->nsp > 0) /* interating over lists */
|
||||||
{
|
{
|
||||||
@ -1958,6 +1997,8 @@ cp_one_file(struct display *dp, const char *filename, const char *destname)
|
|||||||
else if (tmpname != NULL && unlink(tmpname) != 0)
|
else if (tmpname != NULL && unlink(tmpname) != 0)
|
||||||
display_log(dp, APP_WARNING, "unlink %s failed (%s)", tmpname,
|
display_log(dp, APP_WARNING, "unlink %s failed (%s)", tmpname,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
|
||||||
|
log_search(dp, log_depth);
|
||||||
}
|
}
|
||||||
while (dp->nsp > 0);
|
while (dp->nsp > 0);
|
||||||
|
|
||||||
@ -2050,18 +2091,23 @@ main(const int argc, const char * const * const argv)
|
|||||||
/* An error: the output is meaningless */
|
/* An error: the output is meaningless */
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((d.options & SEARCH) || d.best[0] != 0)
|
else if (d.best[0] != 0)
|
||||||
printf("%s [%ld x %ld %d bpp %s, %lu bytes] %lu -> %lu with '%s'\n",
|
{
|
||||||
infile, (unsigned long)d.w, (unsigned long)d.h, d.bpp,
|
/* This result may already have been output, in which case best_size
|
||||||
cts(d.ct), (unsigned long)d.size, (unsigned long)d.read_size,
|
* has been reset.
|
||||||
(unsigned long)d.best_size, d.best);
|
*/
|
||||||
|
if (d.best_size < MAX_SIZE)
|
||||||
|
print_search_results(&d);
|
||||||
|
}
|
||||||
|
|
||||||
else if (d.options & SIZES)
|
else if (d.options & SIZES)
|
||||||
printf("%s [%ld x %ld %d bpp %s, %lu bytes] 0x%lx %lu -> %lu\n",
|
{
|
||||||
|
printf("%s [%ld x %ld %d bpp %s, %lu bytes] %lu -> %lu [0x%lx]\n",
|
||||||
infile, (unsigned long)d.w, (unsigned long)d.h, d.bpp,
|
infile, (unsigned long)d.w, (unsigned long)d.h, d.bpp,
|
||||||
cts(d.ct), (unsigned long)d.size, (unsigned long)d.results,
|
cts(d.ct), (unsigned long)d.size, (unsigned long)d.read_size,
|
||||||
(unsigned long)d.read_size, (unsigned long)d.write_size);
|
(unsigned long)d.write_size, (unsigned long)d.results);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
/* Here on any return, including failures, except user/internal issues
|
/* Here on any return, including failures, except user/internal issues
|
||||||
*/
|
*/
|
||||||
@ -2085,6 +2131,7 @@ main(const int argc, const char * const * const argv)
|
|||||||
printf(" %s", infile);
|
printf(" %s", infile);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user