before I had about 34 FPS when scaled up, now nearly 60

I dropped the set_video_mode part, since SDLx::App->run doesthat for you.
Then I got rid of that surface, we really need just two: a canvas and our app.
The rest is just a bit cleanup, like using app->blit_by instead of a temp var.