void SpriteMainScene::endStat(float dt)
{
    unschedule(CC_SCHEDULE_SELECTOR(SpriteMainScene::endStat));
    isStating = false;
    
    // record test data
    auto typeStr = getTestCaseName();
    auto avgStr = genStr("%.2f", (float) statCount / totalStatTime);
    Profile::getInstance()->addTestResult(genStrVector(genStr("%d", _quantityNodes).c_str(), typeStr.c_str(),
                                                       genStr("%d", _subtestNumber).c_str(), nullptr),
                                          genStrVector(avgStr.c_str(), genStr("%.2f", minFrameRate).c_str(),
                                                       genStr("%.2f", maxFrameRate).c_str(), nullptr));
    
    // check the auto test is end or not
    int autoTestCount = sizeof(autoTestSpriteCounts) / sizeof(int);
    if (autoTestIndex >= (autoTestCount - 1) &&
        _subtestNumber >= MAX_SUB_TEST_NUM)
    {
        // auto test end
        Profile::getInstance()->testCaseEnd();
        setAutoTesting(false);
        return;
    }
    
    if (autoTestIndex >= (autoTestCount - 1))
    {
        autoTestIndex = 0;
        _subtestNumber++;
    }
    else
    {
        autoTestIndex++;
    }
    doAutoTest();
}
void ScenarioTest::endStat(float dt)
{
    unschedule(CC_SCHEDULE_SELECTOR(ScenarioTest::endStat));
    isStating = false;
    
    // record test data
    auto avgStr = genStr("%.2f", (float) statCount / totalStatTime);
    Profile::getInstance()->addTestResult(genStrVector(genStr("%d", _spriteArray.size()).c_str(),
                                                       genStr("%d", _particleNumber).c_str(),
                                                       genStr("%d", _parsysArray.size()).c_str(),
                                                       nullptr),
                                          genStrVector(avgStr.c_str(), genStr("%.2f", minFrameRate).c_str(),
                                                       genStr("%.2f", maxFrameRate).c_str(), nullptr));

    // check the auto test is end or not
    int autoTestCount = sizeof(autoTestCounts) / sizeof(TestCaseInfo);
    if (autoTestIndex >= (autoTestCount - 1))
    {
        // auto test end
        Profile::getInstance()->testCaseEnd();
        setAutoTesting(false);
        return;
    }

    autoTestIndex++;
    doAutoTest();
}
void ScenarioTest::onEnter()
{
    TestCase::onEnter();
    
    if (isAutoTesting()) {
        autoTestIndex = 0;
        Profile::getInstance()->testCaseBegin("ScenarioTest",
                                              genStrVector("SpriteCount", "ParticleCount", "ParticleSystemCount", nullptr),
                                              genStrVector("Avg", "Min", "Max", nullptr));
        doAutoTest();
        scheduleUpdate();
    }
}
void ParticleMainScene::onEnterTransitionDidFinish()
{
    Scene::onEnterTransitionDidFinish();

    if (this->isAutoTesting()) {
        Profile::getInstance()->testCaseBegin("ParticleTest",
                                              genStrVector("Size", "TextureFormat", "ParticleCount", nullptr),
                                              genStrVector("Avg", "Min", "Max", nullptr));
        autoTestIndex = 0;
        subtestNumber = 1;
        
        doAutoTest();
    }
}
void ParticleMainScene::endStat(float dt)
{
    unschedule(CC_SCHEDULE_SELECTOR(ParticleMainScene::endStat));
    isStating = false;

    // record test data
    std::string tf;
    switch (subtestNumber) {
        case 1:
            tf = "RGBA8888";
            break;
        case 2:
            tf = "RGBA4444";
            break;
        case 3:
            tf = "A8";
            break;
        default:
            tf = "unknown";
            break;
    }
    auto avgStr = genStr("%.2f", (float) statCount / totalStatTime);
    Profile::getInstance()->addTestResult(genStrVector(genStr("%d", particleSize).c_str(), tf.c_str(),
                                                       genStr("%d", quantityParticles).c_str(), nullptr),
                                          genStrVector(avgStr.c_str(), genStr("%.2f", minFrameRate).c_str(),
                                                       genStr("%.2f", maxFrameRate).c_str(), nullptr));

    // check the auto test is end or not
    int autoTestCount = sizeof(autoTestParticleCounts) / sizeof(int);
    if (autoTestIndex >= (autoTestCount - 1) &&
        subtestNumber >= MAX_SUB_TEST_NUM)
    {
        // auto test end
        Profile::getInstance()->testCaseEnd();
        setAutoTesting(false);
        return;
    }

    if (autoTestIndex >= (autoTestCount - 1))
    {
        autoTestIndex = 0;
        subtestNumber++;
    }
    else
    {
        autoTestIndex++;
    }
    doAutoTest();
}
void SpriteMainScene::onEnter()
{
    Scene::onEnter();
    
    if (isAutoTesting())
    {
        scheduleUpdate();
        Profile::getInstance()->testCaseBegin("SpriteTest",
                                              genStrVector("SpriteCount", "Type", "SubTest", nullptr),
                                              genStrVector("Avg", "Min", "Max", nullptr));
        
        autoTestIndex = 0;
        _subtestNumber = 1;

        doAutoTest();
    }
}