Skip to content

Optimization in the LayerPacker class#667

Open
bram123 wants to merge 1 commit into
dvdoug:masterfrom
bram123:performance_layerpacker
Open

Optimization in the LayerPacker class#667
bram123 wants to merge 1 commit into
dvdoug:masterfrom
bram123:performance_layerpacker

Conversation

@bram123

@bram123 bram123 commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Added early return when there is no possible space in the layer.

Tests on my environment:

Before (Time: 11:09.402): PHPUnit 12.5.31 by Sebastian Bergmann and contributors. Runtime: PHP 8.3.32

............................................................. 61 / 5151 ( 1%)
............................................................. 122 / 5151 ( 2%)
............................................................. 183 / 5151 ( 3%)
............................................................. 244 / 5151 ( 4%)
............................................................. 305 / 5151 ( 5%)
............................................................. 366 / 5151 ( 7%)
............................................................. 427 / 5151 ( 8%)
............................................................. 488 / 5151 ( 9%)
............................................................. 549 / 5151 ( 10%)
............................................................. 610 / 5151 ( 11%)
............................................................. 671 / 5151 ( 13%)
............................................................. 732 / 5151 ( 14%)
............................................................. 793 / 5151 ( 15%)
............................................................. 854 / 5151 ( 16%)
............................................................. 915 / 5151 ( 17%)
............................................................. 976 / 5151 ( 18%)
............................................................. 1037 / 5151 ( 20%)
............................................................. 1098 / 5151 ( 21%)
............................................................. 1159 / 5151 ( 22%)
............................................................. 1220 / 5151 ( 23%)
............................................................. 1281 / 5151 ( 24%)
............................................................. 1342 / 5151 ( 26%)
............................................................. 1403 / 5151 ( 27%)
............................................................. 1464 / 5151 ( 28%)
............................................................. 1525 / 5151 ( 29%)
............................................................. 1586 / 5151 ( 30%)
............................................................. 1647 / 5151 ( 31%)
............................................................. 1708 / 5151 ( 33%)
............................................................. 1769 / 5151 ( 34%)
............................................................. 1830 / 5151 ( 35%)
............................................................. 1891 / 5151 ( 36%)
............................................................. 1952 / 5151 ( 37%)
............................................................. 2013 / 5151 ( 39%)
............................................................. 2074 / 5151 ( 40%)
............................................................. 2135 / 5151 ( 41%)
............................................................. 2196 / 5151 ( 42%)
............................................................. 2257 / 5151 ( 43%)
............................................................. 2318 / 5151 ( 45%)
............................................................. 2379 / 5151 ( 46%)
............................................................. 2440 / 5151 ( 47%)
............................................................. 2501 / 5151 ( 48%)
............................................................. 2562 / 5151 ( 49%)
............................................................. 2623 / 5151 ( 50%)
............................................................. 2684 / 5151 ( 52%)
............................................................. 2745 / 5151 ( 53%)
............................................................. 2806 / 5151 ( 54%)
............................................................. 2867 / 5151 ( 55%)
............................................................. 2928 / 5151 ( 56%)
............................................................. 2989 / 5151 ( 58%)
............................................................. 3050 / 5151 ( 59%)
............................................................. 3111 / 5151 ( 60%)
............................................................. 3172 / 5151 ( 61%)
............................................................. 3233 / 5151 ( 62%)
............................................................. 3294 / 5151 ( 63%)
............................................................. 3355 / 5151 ( 65%)
............................................................. 3416 / 5151 ( 66%)
............................................................. 3477 / 5151 ( 67%)
............................................................. 3538 / 5151 ( 68%)
............................................................. 3599 / 5151 ( 69%)
............................................................. 3660 / 5151 ( 71%)
............................................................. 3721 / 5151 ( 72%)
............................................................. 3782 / 5151 ( 73%)
............................................................. 3843 / 5151 ( 74%)
............................................................. 3904 / 5151 ( 75%)
............................................................. 3965 / 5151 ( 76%)
............................................................. 4026 / 5151 ( 78%)
............................................................. 4087 / 5151 ( 79%)
............................................................. 4148 / 5151 ( 80%)
............................................................. 4209 / 5151 ( 81%)
............................................................. 4270 / 5151 ( 82%)
............................................................. 4331 / 5151 ( 84%)
.........................................S.SSS............... 4392 / 5151 ( 85%)
............................................................. 4453 / 5151 ( 86%)
............................................................. 4514 / 5151 ( 87%)
............................................................. 4575 / 5151 ( 88%)
............................................................. 4636 / 5151 ( 90%)
............................................................. 4697 / 5151 ( 91%)
............................................................. 4758 / 5151 ( 92%)
............................................................. 4819 / 5151 ( 93%)
............................................................. 4880 / 5151 ( 94%)
............................................................. 4941 / 5151 ( 95%)
............................................................. 5002 / 5151 ( 97%)
............................................................. 5063 / 5151 ( 98%)
............................................................. 5124 / 5151 ( 99%)
.......SSSSSS..S....SS..... 5151 / 5151 (100%)

Time: 11:09.402, Memory: 190.00 MB

There were 13 skipped tests:

  1. DVDoug\BoxPacker\PackerTest::testIssue334
  2. DVDoug\BoxPacker\PackerTest::testIssue275B
  3. DVDoug\BoxPacker\PackerTest::testIssue275C
  4. DVDoug\BoxPacker\PackerTest::testIssue275D
  5. DVDoug\BoxPacker\VolumePackerTest::testIssue214
  6. DVDoug\BoxPacker\VolumePackerTest::testIssue227
  7. DVDoug\BoxPacker\VolumePackerTest::testIssue230
  8. DVDoug\BoxPacker\VolumePackerTest::testIssue240
  9. DVDoug\BoxPacker\VolumePackerTest::testIssue264
  10. DVDoug\BoxPacker\VolumePackerTest::testIssue268
  11. DVDoug\BoxPacker\VolumePackerTest::testIssue366
  12. DVDoug\BoxPacker\VolumePackerTest::testIssue590
  13. DVDoug\BoxPacker\VolumePackerTest::testIssue609

OK, but some tests were skipped!
Tests: 5151, Assertions: 35366, Skipped: 13.

After (Time: 08:20.433): PHPUnit 12.5.31 by Sebastian Bergmann and contributors. Runtime: PHP 8.3.32

............................................................. 61 / 5151 ( 1%)
............................................................. 122 / 5151 ( 2%)
............................................................. 183 / 5151 ( 3%)
............................................................. 244 / 5151 ( 4%)
............................................................. 305 / 5151 ( 5%)
............................................................. 366 / 5151 ( 7%)
............................................................. 427 / 5151 ( 8%)
............................................................. 488 / 5151 ( 9%)
............................................................. 549 / 5151 ( 10%)
............................................................. 610 / 5151 ( 11%)
............................................................. 671 / 5151 ( 13%)
............................................................. 732 / 5151 ( 14%)
............................................................. 793 / 5151 ( 15%)
............................................................. 854 / 5151 ( 16%)
............................................................. 915 / 5151 ( 17%)
............................................................. 976 / 5151 ( 18%)
............................................................. 1037 / 5151 ( 20%)
............................................................. 1098 / 5151 ( 21%)
............................................................. 1159 / 5151 ( 22%)
............................................................. 1220 / 5151 ( 23%)
............................................................. 1281 / 5151 ( 24%)
............................................................. 1342 / 5151 ( 26%)
............................................................. 1403 / 5151 ( 27%)
............................................................. 1464 / 5151 ( 28%)
............................................................. 1525 / 5151 ( 29%)
............................................................. 1586 / 5151 ( 30%)
............................................................. 1647 / 5151 ( 31%)
............................................................. 1708 / 5151 ( 33%)
............................................................. 1769 / 5151 ( 34%)
............................................................. 1830 / 5151 ( 35%)
............................................................. 1891 / 5151 ( 36%)
............................................................. 1952 / 5151 ( 37%)
............................................................. 2013 / 5151 ( 39%)
............................................................. 2074 / 5151 ( 40%)
............................................................. 2135 / 5151 ( 41%)
............................................................. 2196 / 5151 ( 42%)
............................................................. 2257 / 5151 ( 43%)
............................................................. 2318 / 5151 ( 45%)
............................................................. 2379 / 5151 ( 46%)
............................................................. 2440 / 5151 ( 47%)
............................................................. 2501 / 5151 ( 48%)
............................................................. 2562 / 5151 ( 49%)
............................................................. 2623 / 5151 ( 50%)
............................................................. 2684 / 5151 ( 52%)
............................................................. 2745 / 5151 ( 53%)
............................................................. 2806 / 5151 ( 54%)
............................................................. 2867 / 5151 ( 55%)
............................................................. 2928 / 5151 ( 56%)
............................................................. 2989 / 5151 ( 58%)
............................................................. 3050 / 5151 ( 59%)
............................................................. 3111 / 5151 ( 60%)
............................................................. 3172 / 5151 ( 61%)
............................................................. 3233 / 5151 ( 62%)
............................................................. 3294 / 5151 ( 63%)
............................................................. 3355 / 5151 ( 65%)
............................................................. 3416 / 5151 ( 66%)
............................................................. 3477 / 5151 ( 67%)
............................................................. 3538 / 5151 ( 68%)
............................................................. 3599 / 5151 ( 69%)
............................................................. 3660 / 5151 ( 71%)
............................................................. 3721 / 5151 ( 72%)
............................................................. 3782 / 5151 ( 73%)
............................................................. 3843 / 5151 ( 74%)
............................................................. 3904 / 5151 ( 75%)
............................................................. 3965 / 5151 ( 76%)
............................................................. 4026 / 5151 ( 78%)
............................................................. 4087 / 5151 ( 79%)
............................................................. 4148 / 5151 ( 80%)
............................................................. 4209 / 5151 ( 81%)
............................................................. 4270 / 5151 ( 82%)
............................................................. 4331 / 5151 ( 84%)
.........................................S.SSS............... 4392 / 5151 ( 85%)
............................................................. 4453 / 5151 ( 86%)
............................................................. 4514 / 5151 ( 87%)
............................................................. 4575 / 5151 ( 88%)
............................................................. 4636 / 5151 ( 90%)
............................................................. 4697 / 5151 ( 91%)
............................................................. 4758 / 5151 ( 92%)
............................................................. 4819 / 5151 ( 93%)
............................................................. 4880 / 5151 ( 94%)
............................................................. 4941 / 5151 ( 95%)
............................................................. 5002 / 5151 ( 97%)
............................................................. 5063 / 5151 ( 98%)
............................................................. 5124 / 5151 ( 99%)
.......SSSSSS..S....SS..... 5151 / 5151 (100%)

Time: 08:20.433, Memory: 190.00 MB

There were 13 skipped tests:

  1. DVDoug\BoxPacker\PackerTest::testIssue334
  2. DVDoug\BoxPacker\PackerTest::testIssue275B
  3. DVDoug\BoxPacker\PackerTest::testIssue275C
  4. DVDoug\BoxPacker\PackerTest::testIssue275D
  5. DVDoug\BoxPacker\VolumePackerTest::testIssue214
  6. DVDoug\BoxPacker\VolumePackerTest::testIssue227
  7. DVDoug\BoxPacker\VolumePackerTest::testIssue230
  8. DVDoug\BoxPacker\VolumePackerTest::testIssue240
  9. DVDoug\BoxPacker\VolumePackerTest::testIssue264
  10. DVDoug\BoxPacker\VolumePackerTest::testIssue268
  11. DVDoug\BoxPacker\VolumePackerTest::testIssue366
  12. DVDoug\BoxPacker\VolumePackerTest::testIssue590
  13. DVDoug\BoxPacker\VolumePackerTest::testIssue609

OK, but some tests were skipped!
Tests: 5151, Assertions: 35366, Skipped: 13.

Here you can compare the execution times of all pullrequests: https://github.com/dvdoug/BoxPacker/actions?query=event%3Apull_request

Added early return when there is no possible space in the layer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant