@dumganhar : if we set dirty bit in scheduler->update(), The dirty bit will be set every frame. So, We have to set it in scheduler target update() function, such as ActionManager, or other targets. This approach is more precise, but application code have to set the dirty bit if it has custom scheduler update(). Another choice is set dirty bit for all custom update(), it's less precise, but simpler.