Since Daniel committed the vertexdata-bytearray branch, I have been playing around with the Particle Extension. After making the changes needed to get it to work with the new ByteArray based VertexData, I decided to see how it performs. I apologize for the lack of proper benchmarking here, but I thought I'd share it anyway.
My test particle system is set to 3000 max particles.
The first time I ran it, with only the required changes to use the ByteArray based Vertex Data, the particle system ran at ~ 15 FPS.
Scout revealed quite a penalty in calls being made to the VertexData.setColor() and setAlpha(). Turns out VertexData has a private setColorAndAlpha() function. I switched this access from private to public, and replaced :
mVertexData.setColor(vertexID+j, color); mVertexData.setAlpha(vertexID+j, alpha);
This trivial change had a large impact on the FPS. It jumped from ~15fps to ~35fps with this one tweak.
While that was a great improvement, I wanted more. Back to Scout!
This is where the trivial optimizations ended however. After the above change a vast majority of the frame time was being used by setPosition and setColorAndAlpha. There really weren't many optimization paths at this point. Time to try a different approach. The way I see it, particle Systems are an edge case. It's not all that often in your games you are adjusting the position and color of 3000 quads every frame. Since Particle Systems and an exception, why not make their code one too? How? By NOT re-using VertexData.
Leeching the great work Daniel did in VertexData, I decided to see what the impact would be of eliminating the overhead of all those function calls, every frame, by removing ParticleSystem.as's use of VertexData, and reproduce the functionality with a ByteArray internal to ParticleSystem.as.
The results of this were another 8-9 FPS.
In the end the 3000 particle system went from ~15fps to ~44 fps. Not too shabby.
If interested my changes can be found @