But I would like to know what is the critical difference between “drawing a bigger texture at once” with “drawing smaller textures with multiple OpenGL function call”?
The only difference that I can prospect is that if many images(sprites) are overlapped with each other, drawing at once can omit these overlapped parts of image.
So… to reword your question: Why is batch rendering faster than non-batch rendering?
Random Google search reveals
To draw an object on the screen, the engine has to issue a draw call to graphics API (OpenGL ES in case of iOS). Every single draw call requires a significant amount of work to be executed inside the graphics API. Therefore, each draw call causes significant performance overhead on the CPU side.
Fewer draw calls == fewer overhead.
Although I’m no OpenGL guru, for overlap I do not believe that your assumption is correct unless you are using some specific parameters. You may want to look into depth testing for that.
Our game is coming from iOS to android as well, at least on iOS, our game came from an average of 35/45 fps to full 60 fps just from using batch node, we have at least more then 60/90 sprites and we use 4 spritesheets, 1024x2048, 1024x1024, 2048x2048, 1024x2028, and as you can see, we are using way too much memory just by loading this textures, but we managed to pack all of our sprites to their respective spritesheet images and reduce the memory size by using 4444 bits textures. And when they were grouped together (using parallax + few batch nodes) we had a huge performance boost!
If your game does not use a lot of draw calls or you are just testing it out, then there is a chance that you wont fell a difference. But when things start to get big, you should optimize whenever you can.