Allow passing a format description to the evaluator
This commit is contained in:
parent
2d3555fe0f
commit
268499b0db
2 changed files with 18 additions and 8 deletions
|
|
@ -108,6 +108,12 @@ impl Evaluator {
|
||||||
|
|
||||||
/// Check if the image is smaller than others
|
/// Check if the image is smaller than others
|
||||||
pub fn try_image(&self, image: Arc<PngImage>) {
|
pub fn try_image(&self, image: Arc<PngImage>) {
|
||||||
|
let description = format!("{}", image.ihdr.color_type);
|
||||||
|
self.try_image_with_description(image, &description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Check if the image is smaller than others, with a description for verbose mode
|
||||||
|
pub fn try_image_with_description(&self, image: Arc<PngImage>, description: &str) {
|
||||||
let nth = self.nth.fetch_add(1, SeqCst);
|
let nth = self.nth.fetch_add(1, SeqCst);
|
||||||
// These clones are only cheap refcounts
|
// These clones are only cheap refcounts
|
||||||
let deadline = self.deadline.clone();
|
let deadline = self.deadline.clone();
|
||||||
|
|
@ -116,6 +122,7 @@ impl Evaluator {
|
||||||
let optimize_alpha = self.optimize_alpha;
|
let optimize_alpha = self.optimize_alpha;
|
||||||
let executed = self.executed.clone();
|
let executed = self.executed.clone();
|
||||||
let best_candidate_size = self.best_candidate_size.clone();
|
let best_candidate_size = self.best_candidate_size.clone();
|
||||||
|
let description = description.to_string();
|
||||||
// sends it off asynchronously for compression,
|
// sends it off asynchronously for compression,
|
||||||
// but results will be collected via the message queue
|
// but results will be collected via the message queue
|
||||||
#[cfg(feature = "parallel")]
|
#[cfg(feature = "parallel")]
|
||||||
|
|
@ -138,9 +145,9 @@ impl Evaluator {
|
||||||
let size = idat_data.len() + image.key_chunks_size();
|
let size = idat_data.len() + image.key_chunks_size();
|
||||||
best_candidate_size.set_min(size);
|
best_candidate_size.set_min(size);
|
||||||
trace!(
|
trace!(
|
||||||
"Eval: {}-bit {:20} {:8} {} bytes",
|
"Eval: {}-bit {:23} {:8} {} bytes",
|
||||||
image.ihdr.bit_depth,
|
image.ihdr.bit_depth,
|
||||||
image.ihdr.color_type,
|
description,
|
||||||
filter,
|
filter,
|
||||||
size
|
size
|
||||||
);
|
);
|
||||||
|
|
@ -166,9 +173,9 @@ impl Evaluator {
|
||||||
}
|
}
|
||||||
} else if let Err(PngError::DeflatedDataTooLong(size)) = idat_data {
|
} else if let Err(PngError::DeflatedDataTooLong(size)) = idat_data {
|
||||||
trace!(
|
trace!(
|
||||||
"Eval: {}-bit {:20} {:8} >{} bytes",
|
"Eval: {}-bit {:23} {:8} >{} bytes",
|
||||||
image.ihdr.bit_depth,
|
image.ihdr.bit_depth,
|
||||||
image.ihdr.color_type,
|
description,
|
||||||
filter,
|
filter,
|
||||||
size
|
size
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ pub(crate) fn perform_reductions(
|
||||||
}
|
}
|
||||||
// If either action changed the data then enter this into the evaluator
|
// If either action changed the data then enter this into the evaluator
|
||||||
if !Arc::ptr_eq(&png, &baseline) {
|
if !Arc::ptr_eq(&png, &baseline) {
|
||||||
eval.try_image(png.clone());
|
eval.try_image_with_description(png.clone(), "Indexed (luma sort)");
|
||||||
evaluation_added = true;
|
evaluation_added = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -123,7 +123,7 @@ pub(crate) fn perform_reductions(
|
||||||
// For relatively small differences, enter this into the evaluator
|
// For relatively small differences, enter this into the evaluator
|
||||||
// Otherwise we're confident enough for it to become the baseline
|
// Otherwise we're confident enough for it to become the baseline
|
||||||
if png.data.len() - new.data.len() <= INDEXED_MAX_DIFF {
|
if png.data.len() - new.data.len() <= INDEXED_MAX_DIFF {
|
||||||
eval.try_image(new.clone());
|
eval.try_image_with_description(new.clone(), "Indexed (luma sort)");
|
||||||
evaluation_added = true;
|
evaluation_added = true;
|
||||||
} else {
|
} else {
|
||||||
baseline = new.clone();
|
baseline = new.clone();
|
||||||
|
|
@ -149,7 +149,10 @@ pub(crate) fn perform_reductions(
|
||||||
if let ColorType::Indexed { palette } = &reduced.ihdr.color_type {
|
if let ColorType::Indexed { palette } = &reduced.ihdr.color_type {
|
||||||
if !palettes.contains(palette) {
|
if !palettes.contains(palette) {
|
||||||
palettes.push(palette.clone());
|
palettes.push(palette.clone());
|
||||||
eval.try_image(Arc::new(reduced));
|
eval.try_image_with_description(
|
||||||
|
Arc::new(reduced),
|
||||||
|
"Indexed (battiato sort)",
|
||||||
|
);
|
||||||
evaluation_added = true;
|
evaluation_added = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -162,7 +165,7 @@ pub(crate) fn perform_reductions(
|
||||||
if let ColorType::Indexed { palette } = &reduced.ihdr.color_type {
|
if let ColorType::Indexed { palette } = &reduced.ihdr.color_type {
|
||||||
if !palettes.contains(palette) {
|
if !palettes.contains(palette) {
|
||||||
palettes.push(palette.clone());
|
palettes.push(palette.clone());
|
||||||
eval.try_image(Arc::new(reduced));
|
eval.try_image_with_description(Arc::new(reduced), "Indexed (mzeng sort)");
|
||||||
evaluation_added = true;
|
evaluation_added = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue