Skip to content

Commit ade0864

Browse files
Union of compress & convert statistics (#111)
* add union of compress/convert in statistics * conversions still count extra credits * add/change tests * format * format * set optimized to optimized and add test to verify
1 parent 78de4a9 commit ade0864

5 files changed

Lines changed: 87 additions & 19 deletions

File tree

src/class-tiny-bulk-optimization.php

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -125,22 +125,15 @@ private static function populate_optimization_statistics( $settings, $result, $s
125125
$image_stats = $tiny_image->get_statistics( $active_sizes, $active_tinify_sizes );
126126

127127
++$stats['uploaded-images'];
128-
$stats['estimated_credit_use'] += $image_stats['available_uncompressed_sizes'];
128+
$stats['estimated_credit_use'] += $image_stats['available_uncompressed_sizes'];
129+
$stats['available-unoptimized-sizes'] += $image_stats['available_unoptimized_sizes'];
130+
$stats['optimized-image-sizes'] += $image_stats['image_sizes_optimized'];
131+
$stats['optimized-library-size'] += $image_stats['compressed_total_size'];
132+
$stats['unoptimized-library-size'] += $image_stats['initial_total_size'];
133+
129134
if ( $conversion_enabled ) {
130-
$stats['available-unoptimized-sizes'] +=
131-
$image_stats['available_unconverted_sizes'];
132-
$stats['optimized-image-sizes'] +=
133-
$image_stats['image_sizes_converted'];
134-
$stats['estimated_credit_use'] +=
135-
$image_stats['available_unconverted_sizes'];
136-
} else {
137-
$stats['available-unoptimized-sizes'] +=
138-
$image_stats['available_uncompressed_sizes'];
139-
$stats['optimized-image-sizes'] +=
140-
$image_stats['image_sizes_compressed'];
135+
$stats['estimated_credit_use'] += $image_stats['available_unconverted_sizes'];
141136
}
142-
$stats['optimized-library-size'] += $image_stats['compressed_total_size'];
143-
$stats['unoptimized-library-size'] += $image_stats['initial_total_size'];
144137

145138
$has_conversions = $image_stats['available_unconverted_sizes'] > 0;
146139
$has_compressions = $image_stats['available_uncompressed_sizes'] > 0;

src/class-tiny-image.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,10 @@ public function get_statistics( $active_sizes, $active_tinify_sizes ) {
483483
$this->statistics['available_uncompressed_sizes'] = 0;
484484
$this->statistics['image_sizes_converted'] = 0;
485485
$this->statistics['available_unconverted_sizes'] = 0;
486+
$this->statistics['image_sizes_optimized'] = 0;
487+
$this->statistics['available_unoptimized_sizes'] = 0;
488+
489+
$conversion_enabled = $this->settings->get_conversion_enabled();
486490

487491
foreach ( $this->sizes as $size_name => $size ) {
488492
// skip duplicates or inactive sizes
@@ -526,6 +530,15 @@ public function get_statistics( $active_sizes, $active_tinify_sizes ) {
526530
} else {
527531
++$this->statistics['available_unconverted_sizes'];
528532
}
533+
534+
$needs_compression = $size->uncompressed();
535+
$needs_conversion = $conversion_enabled && $size->unconverted();
536+
if ( $needs_compression || $needs_conversion ) {
537+
++$this->statistics['available_unoptimized_sizes'];
538+
} elseif ( $size->compressed() && ( ! $conversion_enabled
539+
|| $size->has_been_converted() ) ) {
540+
++$this->statistics['image_sizes_optimized'];
541+
}
529542
}
530543
}// End foreach().
531544

src/class-tiny-plugin.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,7 @@ public function compress_image_for_bulk() {
625625
$result['message'] = $tiny_image->get_latest_error();
626626
$result['image_sizes_compressed'] = $image_statistics['image_sizes_compressed'];
627627
$result['image_sizes_converted'] = $image_statistics['image_sizes_converted'];
628-
$result['image_sizes_optimized'] = $image_statistics['image_sizes_compressed'];
628+
$result['image_sizes_optimized'] = $image_statistics['image_sizes_optimized'];
629629

630630
$result['initial_total_size'] = size_format(
631631
$image_statistics['initial_total_size'],

test/unit/TinyImageEmptyTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public function test_get_statistics() {
3939
'available_uncompressed_sizes' => 4,
4040
'available_unconverted_sizes' => 4,
4141
'image_sizes_converted' => 0,
42+
'image_sizes_optimized' => 0,
43+
'available_unoptimized_sizes' => 4
4244
), $this->subject->get_statistics( $active_sizes, $active_tinify_sizes ) );
4345
}
4446
}

test/unit/TinyImageTest.php

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,16 +156,76 @@ public function test_get_latest_error_should_return_trimmed_message_if_message_i
156156
}
157157

158158
public function test_get_statistics() {
159-
$active_sizes = $this->settings->get_sizes();
160-
$active_tinify_sizes = $this->settings->get_active_tinify_sizes();
159+
$this->wp->addOption( 'tinypng_convert_format', array(
160+
'convert' => 'off',
161+
) );
162+
$settings = new Tiny_Settings();
163+
$subject = new Tiny_Image( $settings, 1, $this->json( '_wp_attachment_metadata' ) );
164+
165+
$active_sizes = $settings->get_sizes();
166+
$active_tinify_sizes = $settings->get_active_tinify_sizes();
167+
$stats = $subject->get_statistics( $active_sizes, $active_tinify_sizes );
168+
169+
$this->assertEquals( array(
170+
'initial_total_size' => 360542,
171+
'compressed_total_size' => 328670,
172+
'image_sizes_compressed' => 3,
173+
'available_uncompressed_sizes' => 1,
174+
'image_sizes_converted' => 0,
175+
'available_unconverted_sizes' => 4,
176+
'image_sizes_optimized' => 3,
177+
'available_unoptimized_sizes' => 1,
178+
), $stats);
179+
}
180+
181+
public function test_get_statistics_with_conversion_enabled() {
182+
$this->wp->addOption( 'tinypng_convert_format', array(
183+
'convert' => 'on',
184+
'convert_to' => 'smallest',
185+
) );
186+
$settings = new Tiny_Settings();
187+
$subject = new Tiny_Image( $settings, 1, $this->json( '_wp_attachment_metadata' ) );
188+
189+
$active_sizes = $settings->get_sizes();
190+
$active_tinify_sizes = $settings->get_active_tinify_sizes();
191+
$stats = $subject->get_statistics( $active_sizes, $active_tinify_sizes );
192+
161193
$this->assertEquals( array(
162194
'initial_total_size' => 360542,
163195
'compressed_total_size' => 328670,
164196
'image_sizes_compressed' => 3,
165197
'available_uncompressed_sizes' => 1,
166198
'image_sizes_converted' => 0,
167-
'available_unconverted_sizes' => 4
168-
), $this->subject->get_statistics( $active_sizes, $active_tinify_sizes ) );
199+
'available_unconverted_sizes' => 4,
200+
'image_sizes_optimized' => 0,
201+
'available_unoptimized_sizes' => 4,
202+
), $stats);
203+
}
204+
205+
public function test_image_sizes_optimized_is_independent_of_image_sizes_compressed_when_conversion_is_pending() {
206+
$this->wp->addOption( 'tinypng_convert_format', array(
207+
'convert' => 'on',
208+
'convert_to' => 'smallest',
209+
) );
210+
$settings = new Tiny_Settings();
211+
$subject = new Tiny_Image( $settings, 1, $this->json( '_wp_attachment_metadata' ) );
212+
213+
$stats = $subject->get_statistics(
214+
$settings->get_sizes(),
215+
$settings->get_active_tinify_sizes()
216+
);
217+
218+
$this->assertEquals( 3, $stats['image_sizes_compressed'],
219+
'Three sizes have been compressed.'
220+
);
221+
$this->assertEquals( 0, $stats['image_sizes_optimized'],
222+
'No sizes count as fully optimized because conversion has not been done but has been enabled.'
223+
);
224+
$this->assertNotEquals(
225+
$stats['image_sizes_compressed'],
226+
$stats['image_sizes_optimized'],
227+
'the number of compressed images should not be equal to the number of optimized images.'
228+
);
169229
}
170230

171231
public function test_get_image_sizes_available_for_compression_when_file_modified() {

0 commit comments

Comments
 (0)