|
15 | 15 | import shlex
|
16 | 16 | import signal
|
17 | 17 | import threading
|
18 |
| -import concurrent.futures |
19 | 18 | from collections import OrderedDict
|
20 | 19 | import queue
|
21 | 20 | import time
|
22 | 21 | import csv
|
23 | 22 | import glob
|
24 |
| -import concurrent |
25 | 23 | import xml.etree.ElementTree as ET
|
26 | 24 | import logging
|
27 | 25 | from pathlib import Path
|
@@ -2494,14 +2492,18 @@ def process(self, pipeline, done, message, lock, results):
|
2494 | 2492 | inst = res.get("instance", None)
|
2495 | 2493 | if inst and inst.status == "skipped":
|
2496 | 2494 | results.skipped_runtime += 1
|
2497 |
| - |
2498 | 2495 | if res.get('returncode', 1) > 0:
|
2499 | 2496 | pipeline.put({"op": "report", "test": self.instance})
|
2500 | 2497 | else:
|
2501 |
| - if self.instance.run and self.instance.handler: |
2502 |
| - pipeline.put({"op": "run", "test": self.instance}) |
2503 |
| - else: |
2504 |
| - pipeline.put({"op": "report", "test": self.instance}) |
| 2498 | + pipeline.put({"op": "gather_metrics", "test": self.instance}) |
| 2499 | + |
| 2500 | + elif op == "gather_metrics": |
| 2501 | + self.gather_metrics(self.instance) |
| 2502 | + if self.instance.run and self.instance.handler: |
| 2503 | + pipeline.put({"op": "run", "test": self.instance}) |
| 2504 | + else: |
| 2505 | + pipeline.put({"op": "report", "test": self.instance}) |
| 2506 | + |
2505 | 2507 | # Run the generated binary using one of the supported handlers
|
2506 | 2508 | elif op == "run":
|
2507 | 2509 | logger.debug("run test: %s" % self.instance.name)
|
@@ -2719,6 +2721,29 @@ def run(self):
|
2719 | 2721 |
|
2720 | 2722 | sys.stdout.flush()
|
2721 | 2723 |
|
| 2724 | + def gather_metrics(self, instance): |
| 2725 | + if self.suite.enable_size_report and not self.suite.cmake_only: |
| 2726 | + self.calc_one_elf_size(instance) |
| 2727 | + else: |
| 2728 | + instance.metrics["ram_size"] = 0 |
| 2729 | + instance.metrics["rom_size"] = 0 |
| 2730 | + instance.metrics["unrecognized"] = [] |
| 2731 | + |
| 2732 | + @staticmethod |
| 2733 | + def calc_one_elf_size(instance): |
| 2734 | + if instance.status not in ["error", "failed", "skipped"]: |
| 2735 | + if instance.platform.type != "native": |
| 2736 | + size_calc = instance.calculate_sizes() |
| 2737 | + instance.metrics["ram_size"] = size_calc.get_ram_size() |
| 2738 | + instance.metrics["rom_size"] = size_calc.get_rom_size() |
| 2739 | + instance.metrics["unrecognized"] = size_calc.unrecognized_sections() |
| 2740 | + else: |
| 2741 | + instance.metrics["ram_size"] = 0 |
| 2742 | + instance.metrics["rom_size"] = 0 |
| 2743 | + instance.metrics["unrecognized"] = [] |
| 2744 | + |
| 2745 | + instance.metrics["handler_time"] = instance.handler.duration if instance.handler else 0 |
| 2746 | + |
2722 | 2747 | class TestSuite(DisablePyTestCollectionMixin):
|
2723 | 2748 | config_re = re.compile('(CONFIG_[A-Za-z0-9_]+)[=]\"?([^\"]*)\"?$')
|
2724 | 2749 | dt_re = re.compile('([A-Za-z0-9_]+)[=]\"?([^\"]*)\"?$')
|
@@ -3471,21 +3496,6 @@ def add_instances(self, instance_list):
|
3471 | 3496 | for instance in instance_list:
|
3472 | 3497 | self.instances[instance.name] = instance
|
3473 | 3498 |
|
3474 |
| - @staticmethod |
3475 |
| - def calc_one_elf_size(instance): |
3476 |
| - if instance.status not in ["error", "failed", "skipped"]: |
3477 |
| - if instance.platform.type != "native": |
3478 |
| - size_calc = instance.calculate_sizes() |
3479 |
| - instance.metrics["ram_size"] = size_calc.get_ram_size() |
3480 |
| - instance.metrics["rom_size"] = size_calc.get_rom_size() |
3481 |
| - instance.metrics["unrecognized"] = size_calc.unrecognized_sections() |
3482 |
| - else: |
3483 |
| - instance.metrics["ram_size"] = 0 |
3484 |
| - instance.metrics["rom_size"] = 0 |
3485 |
| - instance.metrics["unrecognized"] = [] |
3486 |
| - |
3487 |
| - instance.metrics["handler_time"] = instance.handler.duration if instance.handler else 0 |
3488 |
| - |
3489 | 3499 | def add_tasks_to_queue(self, pipeline, build_only=False, test_only=False):
|
3490 | 3500 | for instance in self.instances.values():
|
3491 | 3501 | if build_only:
|
@@ -3553,20 +3563,6 @@ def execute(self, pipeline, done, results):
|
3553 | 3563 | for p in processes:
|
3554 | 3564 | p.terminate()
|
3555 | 3565 |
|
3556 |
| - # FIXME: This needs to move out. |
3557 |
| - if self.enable_size_report and not self.cmake_only: |
3558 |
| - # Parallelize size calculation |
3559 |
| - executor = concurrent.futures.ThreadPoolExecutor(self.jobs) |
3560 |
| - futures = [executor.submit(self.calc_one_elf_size, instance) |
3561 |
| - for instance in self.instances.values()] |
3562 |
| - concurrent.futures.wait(futures) |
3563 |
| - else: |
3564 |
| - for instance in self.instances.values(): |
3565 |
| - instance.metrics["ram_size"] = 0 |
3566 |
| - instance.metrics["rom_size"] = 0 |
3567 |
| - instance.metrics["handler_time"] = instance.handler.duration if instance.handler else 0 |
3568 |
| - instance.metrics["unrecognized"] = [] |
3569 |
| - |
3570 | 3566 | return results
|
3571 | 3567 |
|
3572 | 3568 | def discard_report(self, filename):
|
|
0 commit comments