Your implementation has some problems:
1) Don't use SANITY_CHECK in loops. SANITY_CHECK should be called once per test (with same parameter name) - it is a limitation of OpenCV test framework and we should follow this.
2) TEST_CYCLE doesn't guarantee the same total number of iterations. So results may be different with your approach.
3) Every iteration of performance test under TEST_CYCLE should do the SAME things (all iterations should have same inputs and same operations). But mog is an object and mog(flame,...) can modify state of this object.

I believe that test strategy should be something like this:
1) Load 10 frames into std::vector<Mat> frames; and convert them to required format
1.1) For ocl test implementation upload these frames.

2) TEST_CYCLE()
{
    declare/create new mog object (cpu/ocl);
    for (frame in frames)
       mog(frame, foreground, ...)
}
2.a) download foreground into Mat for ocl implementation only

3) SANITY_CHECK(foreground)

P.S. May be you need to decrease number of frames of test will be very long.
P.S. Also you should provide sanity data for this test case (via opencv_extra repo with same branch name). You can generate it with --perf_write_sanity parameter. But don't forget to setup correct environment variable OPENCV_TEST_DATA_PATH to opencv_extra/testdata directory.