BGRAVirtualScreen have very strange behavior...
Look attached test projects T1 and T2. And look closely the difference in the code...
They have the same functional code, except some "minor" difference. But T1 is 4 time faster than T2!
That "minor" difference is the way components are coded:
T1:
initialization
{$I unit1.lrs}
T2:
implementation
{$R *.lfm}
Result of this "small difference" is 4x difference in execution speed! T1 is faster, but T2 is project created from ground with Lazarus 4.6. And looking deeper in the code, I have noticed internal bitmap is always resized and that happens always when the component's size is different or changed between on redraw calls. But since in T2, internal bitmap is always sized to 0 after finishing drawing in some reason, resizing happens all the time!
How I get to this? I used some old project which I wanted to upgrade with BGRA components and starting new project I noticed excessive speed difference...
All this definitely makes quite a bit of headache. Implementation is definitely weird... And with auto-stretch "feature" I mentioned while ago it really creates more headache than usefulness...