Interface IDMasterOptimizer
public interface IDMasterOptimizer
A manager of
IR optimizers. A master optimizer (MO) orchestrates and executes
optimizers. This class is currently not meant to be implemented by third-party code. To create a
master optimizer instance, use IDGlobalContext.createMasterOptimizer(com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext, boolean, boolean, boolean). Most IR optimizers
will not need to create and use MOs on their own. However, some multi-stage advanced optimizers
may need intermediate code clean-up before proceeding to a later phase. In such cases, using an
MO may be necessary.
Implementation note: the master optimizer may call optimizers repeatedly until no more optimizations are performed.
-
Method Summary
Modifier and TypeMethodDescriptionbooleanadd(IDOptimizer optimizer) Register an external optimizer.<T extends IDOptimizer>
TfindOptimizer(Class<T> cl) Find an optimizer by type.Retrieve registered optimizer instrumenters.Retrieve the list of all optimizers.Retrieve the IR method context to be optimized.booleanDetermine whether safe mode is enabled.intperform()Perform optimizations on thetarget.voidRegister an optimizer instrumenter.booleanremove(IDOptimizer optimizer) Unregister an external optimizer.voidsetOptimizerEnabled(IDOptimizer opt, boolean enabled) Enable or disable an optimizer.voidsetPolicyForOptimizerTag(String tag, boolean allowed) Set the running policy associated to a tag or group of tags.voidsetSafeMode(boolean enabled) Enable or disable safe mode.voidUnregister an optimizer instrumenter.
-
Method Details
-
getTarget
IDMethodContext getTarget()Retrieve the IR method context to be optimized.- Returns:
- the target method context
-
add
Register an external optimizer.- Parameters:
optimizer- an optimizer- Returns:
- true if the optimizer was registered
-
remove
Unregister an external optimizer.- Parameters:
optimizer- a previously-registered optimizer- Returns:
- true if the optimizer was unregistered
-
getListOfOptimizers
List<IDOptimizer> getListOfOptimizers()Retrieve the list of all optimizers. The returned list contains all optimizers (built-in, external, etc.) registered with this MO. While the list is immutable, the optimizer objects can be acted upon. For example, optimizers (including internal optimizers) may be selectively enabled or disabled viasetOptimizerEnabled(IDOptimizer, boolean).- Returns:
- read-only list of currently registered optimizers
-
setOptimizerEnabled
Enable or disable an optimizer.- Parameters:
opt- optimizer to updateenabled- true to enable the optimizer, false to disable it
-
findOptimizer
Find an optimizer by type. If multiple optimizers of the same type were registered (a practice that is not recommended), the first one is returned.- Type Parameters:
T- optimizer type- Parameters:
cl- optimizer type- Returns:
- a registered optimizer of the provided type or null
-
setSafeMode
void setSafeMode(boolean enabled) Enable or disable safe mode. In safe mode, the only optimizers that are run are those whosetypeisDOptimizerType.NORMAL.- Parameters:
enabled- true to enable safe mode, false to disable it
-
isSafeMode
boolean isSafeMode()Determine whether safe mode is enabled. In safe mode, the only optimizers that are run are those whosetypeisDOptimizerType.NORMAL.- Returns:
- true if safe mode is enabled
-
setPolicyForOptimizerTag
Set the running policy associated to a tag or group of tags. Policy checks when deciding whether an optimizer should be run works as follow: 1) the tag must be allowed, 2) if passed, the tag must not be blocked. By default, all tags are allowed, none are blocked. To reset to that default policy: first invoke this method with("*", true), then invoke it with(null, false).- Parameters:
tag- tag name; the special name"*"means all tags; the special name""(empty string) or null string means no tagallowed- true to allow the master optimizer to run the optimizer with the specified tag; false to block it
-
perform
int perform()Perform optimizations on thetarget.- Returns:
- the number of optimizations performed
-
registerInstrumenter
Register an optimizer instrumenter.- Parameters:
inst- instrumenter to register
-
unregisterInstrumenter
Unregister an optimizer instrumenter.- Parameters:
inst- instrumenter to unregister
-
getInstrumenters
List<IDMasterOptimizerInstrumenter> getInstrumenters()Retrieve registered optimizer instrumenters.- Returns:
- the registered instrumenters
-