DeepRegion performance: take fast path for DeepRegion::edges if merged polygons are available.

This commit is contained in:
Matthias Koefferlein 2022-11-27 21:59:06 +01:00
parent 5db45d7aee
commit 5597ee8960
3 changed files with 23 additions and 16 deletions

View File

@ -555,6 +555,12 @@ DeepRegion::merged_deep_layer () const
}
}
bool
DeepRegion::merged_polygons_available () const
{
return m_is_merged || m_merged_polygons_valid;
}
void
DeepRegion::ensure_merged_polygons_valid () const
{
@ -1169,7 +1175,7 @@ public:
EdgesDelegate *
DeepRegion::edges (const EdgeFilterBase *filter) const
{
if (! filter && merged_semantics ()) {
if (! filter && merged_semantics () && ! merged_polygons_available ()) {
// Hierarchical edge detector - no pre-merge required

View File

@ -142,6 +142,7 @@ public:
void set_is_merged (bool f);
bool merged_polygons_available () const;
const DeepLayer &merged_deep_layer () const;
protected:

View File

@ -887,6 +887,11 @@ TEST(14_Interacting)
db::Region r6r = r6;
r6r.set_merged_semantics (false);
db::Edges r1e = r1.edges ();
db::Edges r1ef = r1f.edges ();
db::Edges r1er = r1r.edges ();
r1er.set_merged_semantics (false);
{
db::Layout target;
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
@ -957,11 +962,6 @@ TEST(14_Interacting)
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au14a.gds");
}
db::Edges r1e = r1.edges ();
db::Edges r1ef = r1f.edges ();
db::Edges r1er = r1r.edges ();
r1er.set_merged_semantics (false);
{
db::Layout target;
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
@ -1469,6 +1469,16 @@ TEST(25_Pull)
db::Region r6r = r6;
r6r.set_merged_semantics (false);
db::Edges r1e = r1.edges ();
db::Edges r1ef = r1f.edges ();
db::Edges r1er = r1r.edges ();
r1er.set_merged_semantics (false);
db::Edges r6e = r6.edges ();
db::Edges r6ef = r6f.edges ();
db::Edges r6er = r6r.edges ();
r6er.set_merged_semantics (false);
{
db::Layout target;
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
@ -1507,16 +1517,6 @@ TEST(25_Pull)
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au25a.gds");
}
db::Edges r1e = r1.edges ();
db::Edges r1ef = r1f.edges ();
db::Edges r1er = r1r.edges ();
r1er.set_merged_semantics (false);
db::Edges r6e = r6.edges ();
db::Edges r6ef = r6f.edges ();
db::Edges r6er = r6r.edges ();
r6er.set_merged_semantics (false);
{
db::Layout target;
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));