Performance.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/20506
This commit is contained in:
Jeff Young 2025-04-09 18:02:20 +01:00
parent 98ec2d7ba2
commit 1d45de0d1d
5 changed files with 57 additions and 20 deletions

View File

@ -569,7 +569,7 @@ const LSET& LSET::InternalCuMask()
} }
LSET LSET::AllCuMask( int aCuLayerCount ) LSET allCuMask( int aCuLayerCount )
{ {
LSET ret; LSET ret;
@ -580,13 +580,39 @@ LSET LSET::AllCuMask( int aCuLayerCount )
} }
LSET LSET::AllCuMask( int aCuLayerCount )
{
static LSET savedMax = allCuMask( MAX_CU_LAYERS );
static LSET cache;
static int cacheCuLayerCount = -1;
if( aCuLayerCount == MAX_CU_LAYERS )
return savedMax;
if( aCuLayerCount != cacheCuLayerCount )
{
cache = allCuMask( aCuLayerCount );
cacheCuLayerCount = aCuLayerCount;
}
return cache;
}
LSET allNonCuMask()
{
LSET mask = LSET().set();
for( auto it = mask.copper_layers_begin(); it != mask.copper_layers_end(); ++it )
mask.reset( *it );
return mask;
}
LSET LSET::AllNonCuMask() LSET LSET::AllNonCuMask()
{ {
LSET saved = LSET().set(); static LSET saved = allNonCuMask();
for( auto it = saved.copper_layers_begin(); it != saved.copper_layers_end(); ++it )
saved.reset( *it );
return saved; return saved;
} }

View File

@ -474,8 +474,10 @@ int SCH_ITEM::compare( const SCH_ITEM& aOther, int aCompareFlags ) const
const wxString& SCH_ITEM::GetDefaultFont() const const wxString& SCH_ITEM::GetDefaultFont() const
{ {
static const char eeschema[] = "eeschema";
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager(); SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
EESCHEMA_SETTINGS* cfg = mgr.GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" ); EESCHEMA_SETTINGS* cfg = mgr.GetAppSettings<EESCHEMA_SETTINGS>( eeschema );
return cfg->m_Appearance.default_font; return cfg->m_Appearance.default_font;
} }

View File

@ -907,35 +907,41 @@ void PCB_BASE_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
PCBNEW_SETTINGS* PCB_BASE_FRAME::GetPcbNewSettings() const PCBNEW_SETTINGS* PCB_BASE_FRAME::GetPcbNewSettings() const
{ {
return Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" ); static const char pcbnew[] = "pcbnew";
return Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( pcbnew );
} }
FOOTPRINT_EDITOR_SETTINGS* PCB_BASE_FRAME::GetFootprintEditorSettings() const FOOTPRINT_EDITOR_SETTINGS* PCB_BASE_FRAME::GetFootprintEditorSettings() const
{ {
return Pgm().GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" ); static const char fpedit[] = "fpedit";
return Pgm().GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( fpedit );
} }
PCB_VIEWERS_SETTINGS_BASE* PCB_BASE_FRAME::GetViewerSettingsBase() const PCB_VIEWERS_SETTINGS_BASE* PCB_BASE_FRAME::GetViewerSettingsBase() const
{ {
static const char pcbnew[] = "pcbnew";
static const char fpedit[] = "fpedit";
static const char cvpcb[] = "cvpcb";
switch( GetFrameType() ) switch( GetFrameType() )
{ {
case FRAME_PCB_EDITOR: case FRAME_PCB_EDITOR:
case FRAME_PCB_DISPLAY3D: case FRAME_PCB_DISPLAY3D:
default: default:
return Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" ); return Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( pcbnew );
case FRAME_FOOTPRINT_EDITOR: case FRAME_FOOTPRINT_EDITOR:
case FRAME_FOOTPRINT_WIZARD: case FRAME_FOOTPRINT_WIZARD:
return Pgm().GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" ); return Pgm().GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( fpedit );
case FRAME_FOOTPRINT_VIEWER: case FRAME_FOOTPRINT_VIEWER:
case FRAME_FOOTPRINT_CHOOSER: case FRAME_FOOTPRINT_CHOOSER:
case FRAME_FOOTPRINT_PREVIEW: case FRAME_FOOTPRINT_PREVIEW:
case FRAME_CVPCB: case FRAME_CVPCB:
case FRAME_CVPCB_DISPLAY: case FRAME_CVPCB_DISPLAY:
return Pgm().GetSettingsManager().GetAppSettings<CVPCB_SETTINGS>( "cvpcb" ); return Pgm().GetSettingsManager().GetAppSettings<CVPCB_SETTINGS>( cvpcb );
} }
} }

View File

@ -464,7 +464,8 @@ void PCB_DRAW_PANEL_GAL::UpdateColors()
} }
else else
{ {
auto* app = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" ); static const char pcbnew[] = "pcbnew";
PCBNEW_SETTINGS* app = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( pcbnew );
if( app ) if( app )
cs = Pgm().GetSettingsManager().GetColorSettings( app->m_ColorTheme ); cs = Pgm().GetSettingsManager().GetColorSettings( app->m_ColorTheme );

View File

@ -83,23 +83,27 @@ PCBNEW_SETTINGS* pcbconfig()
// returns the viewer options existing to Cvpcb and Pcbnew // returns the viewer options existing to Cvpcb and Pcbnew
PCB_VIEWERS_SETTINGS_BASE* PCB_PAINTER::viewer_settings() PCB_VIEWERS_SETTINGS_BASE* PCB_PAINTER::viewer_settings()
{ {
static const char pcbnew[] = "pcbnew";
static const char fpedit[] = "fpedit";
static const char cvpcb[] = "cvpcb";
switch( m_frameType ) switch( m_frameType )
{ {
case FRAME_PCB_EDITOR: case FRAME_PCB_EDITOR:
case FRAME_PCB_DISPLAY3D: case FRAME_PCB_DISPLAY3D:
default: default:
return Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" ); return Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( pcbnew );
case FRAME_FOOTPRINT_EDITOR: case FRAME_FOOTPRINT_EDITOR:
case FRAME_FOOTPRINT_WIZARD: case FRAME_FOOTPRINT_WIZARD:
return Pgm().GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" ); return Pgm().GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( fpedit );
case FRAME_FOOTPRINT_VIEWER: case FRAME_FOOTPRINT_VIEWER:
case FRAME_FOOTPRINT_CHOOSER: case FRAME_FOOTPRINT_CHOOSER:
case FRAME_FOOTPRINT_PREVIEW: case FRAME_FOOTPRINT_PREVIEW:
case FRAME_CVPCB: case FRAME_CVPCB:
case FRAME_CVPCB_DISPLAY: case FRAME_CVPCB_DISPLAY:
return Pgm().GetSettingsManager().GetAppSettings<CVPCB_SETTINGS>( "cvpcb" ); return Pgm().GetSettingsManager().GetAppSettings<CVPCB_SETTINGS>( cvpcb );
} }
} }
@ -1230,10 +1234,8 @@ void PCB_PAINTER::draw( const PCB_VIA* aVia, int aLayer )
void PCB_PAINTER::draw( const PAD* aPad, int aLayer ) void PCB_PAINTER::draw( const PAD* aPad, int aLayer )
{ {
COLOR4D color = m_pcbSettings.GetColor( aPad, aLayer ); COLOR4D color = m_pcbSettings.GetColor( aPad, aLayer );
const int copperLayer = IsPadCopperLayer( aLayer ) ? aLayer - LAYER_PAD_COPPER_START : aLayer; const int copperLayer = IsPadCopperLayer( aLayer ) ? aLayer - LAYER_PAD_COPPER_START : aLayer;
PCB_LAYER_ID pcbLayer = static_cast<PCB_LAYER_ID>( copperLayer );
const PCB_LAYER_ID& pcbLayer = static_cast<PCB_LAYER_ID>( copperLayer );
if( IsNetnameLayer( aLayer ) ) if( IsNetnameLayer( aLayer ) )
{ {