|
KiCad PCB EDA Suite
|
Priority task dispatcher for zone fills - we want to do the biggest ones first. More...
Public Types | |
| using | ItemT |
Public Member Functions | |
| COMPLEX_FIRST_FILL_TASK (bool aSimplify) | |
| void | SetReporter (PROGRESS_REPORTER *aReporter) |
| size_t | Execute (std::vector< FILL_INFO > &aItems) |
| Call this to execute the task on all items in aItems, using the thread pool and dispatching the tasks in order of descending priority as determined by computePriorityKey() implemented by the derived class. | |
Protected Attributes | |
| PROGRESS_REPORTER * | m_reporter |
Private Member Functions | |
| int | computePriorityKey (const FILL_INFO &a) const override |
| size_t | task (FILL_INFO &fillInfo) override |
Private Attributes | |
| bool | m_simplify |
| BS::priority_t | m_highestPriority |
| std::chrono::milliseconds | m_reporterInterval |
| std::atomic< bool > | m_abort |
| Set when a task throws, so tasks that have not started yet skip their item. | |
Priority task dispatcher for zone fills - we want to do the biggest ones first.
On average, sorting the largest zones first is slightly faster (5-10%) on large boards.
However, if you allow the large zones to be assigned at random, as they basically will be if they are handled later in the process, there's a chance the very biggest zones will end up consecutive in the same thread which could be a substantial penalty.
Definition at line 1052 of file allegro_builder.cpp.
|
inherited |
Definition at line 36 of file priority_thread_pool_task.h.
|
inline |
Definition at line 1055 of file allegro_builder.cpp.
References m_simplify.
|
inlineoverrideprivate |
Definition at line 1058 of file allegro_builder.cpp.
References ALLEGRO::BOARD_BUILDER::ZONE_FILL_HANDLER::FILL_INFO::m_CombinedFill, and SHAPE_POLY_SET::TotalVertices().
|
inlineinherited |
Call this to execute the task on all items in aItems, using the thread pool and dispatching the tasks in order of descending priority as determined by computePriorityKey() implemented by the derived class.
This method blocks until all tasks are complete, and then re-throws the first exception thrown by a task (if any). If a task throws, later tasks that have not started yet are skipped; tasks already running are not interrupted.
It never returns while any task is still queued or running.
| aItems | The container of items to process. |
Definition at line 66 of file priority_thread_pool_task.h.
|
inlineinherited |
Definition at line 49 of file priority_thread_pool_task.h.
|
inlineoverrideprivate |
Definition at line 1063 of file allegro_builder.cpp.
References SHAPE_POLY_SET::BooleanIntersection(), SHAPE_POLY_SET::ClearArcs(), SHAPE_POLY_SET::Fracture(), ZONE::GetBoardOutline(), ALLEGRO::BOARD_BUILDER::ZONE_FILL_HANDLER::FILL_INFO::m_CombinedFill, ALLEGRO::BOARD_BUILDER::ZONE_FILL_HANDLER::FILL_INFO::m_Layer, m_simplify, ALLEGRO::BOARD_BUILDER::ZONE_FILL_HANDLER::FILL_INFO::m_Zone, and ZONE::SetFilledPolysList().
|
privateinherited |
Set when a task throws, so tasks that have not started yet skip their item.
Definition at line 187 of file priority_thread_pool_task.h.
|
privateinherited |
Definition at line 181 of file priority_thread_pool_task.h.
|
protectedinherited |
Definition at line 157 of file priority_thread_pool_task.h.
|
privateinherited |
Definition at line 182 of file priority_thread_pool_task.h.
|
private |
Definition at line 1080 of file allegro_builder.cpp.
Referenced by COMPLEX_FIRST_FILL_TASK(), and task().