Very low URP performance for my mobile 2D game

I added the Universal Render Pipeline to my game to use the Shader Graph to improve the graphics of my game. But I ran into a performance issue. Even without using any PostProcessing effects, the game does not run smoothly. Using a profiler over USB on my Android device, I saw that PostLateUpdate.FinishFrameRendering was taking 13ms of CPU time. FPS changes from 60 to 30 approximately every tick. I need to achieve stable 60fps.

Statistics from the game mode in the editor:

When I change QualitySettings.targetFramerate from 60 to -1, the profiler shows that now most of the CPU time is spent on WaitForTargetFPS (idle CPU as I understand it) and the game runs on 30 FPS. I am assuming the mobile device or URP is conflicting with the targetFramerate parameter.

Profiler screenshot when targetFramerate is 60 and targetFramerate is -1:

I tried to disable almost all objects in the scene and disable PostProcessing on the camera (although there were no PostProcessing effects on the scene), but I did not get a significant performance gain.

About textures in my game:
My game is pixel style. My largest texture is 128x96 pixels. On most Texture2D WrapMode is set to Point.

My Unity version is 2021.2.4f1

Hi,
You might want to check out the documentation for common profiler markers while investigating this and the linked documentation for the target frame rate and VSync settings. The later would tell you that mobile devices can only run at frame rates matching the screen refresh rate at 60hz and will default to 30 when set to -1.

You seem to be pushing too much rendering or GPU work to safely fit within 16.66ms (60fps) so every second frame it spills over to 33.3ms (30fps).

The texture sizes are likely less interesting and more interesting would be the batch count and to that end, you may want to atlas your textures so that all sprites within one Atlas using the same shader can be drawn in one batch.

Though 29 isn’t a high batch count so… no idea

2d games are more performance killer compare to the 3d games…don’t forget
Because your sprites cover the whole scene and when you are using a heavy shader, your gpu needs to render the whole pixels of your screen

SO the first step is that reducing the screen resolution:
Screen.SetResolution(1280,720,false)

Also share the tested device model