static int cmdline_for_bench_sprite_sort(int argc, const char** argv)
{
    {
        // Register some basic "baseline" benchmark
        std::vector<paint_session> sessions(1);
        for (auto& ps : sessions[0].PaintStructs)
        {
            ps.basic.next_quadrant_ps = (paint_struct*)(std::size(sessions[0].PaintStructs));
        }
        for (auto& quad : sessions[0].Quadrants)
        {
            quad = (paint_struct*)(std::size(sessions[0].Quadrants));
        }
        benchmark::RegisterBenchmark("baseline", BM_paint_session_arrange, sessions);
    }

    // Google benchmark does stuff to argv. It doesn't modify the pointees,
    // but it wants to reorder the pointers, so present a copy of them.
    std::vector<char*> argv_for_benchmark;

    // argv[0] is expected to contain the binary name. It's only for logging purposes, don't bother.
    argv_for_benchmark.push_back(nullptr);

    // Extract file names from argument list. If there is no such file, consider it benchmark option.
    for (int i = 0; i < argc; i++)
    {
        if (platform_file_exists(argv[i]))
        {
            // Register benchmark for sv6 if valid
            std::vector<paint_session> sessions = extract_paint_session(argv[i]);
            if (!sessions.empty())
                benchmark::RegisterBenchmark(argv[i], BM_paint_session_arrange, sessions);
        }
        else
        {
            argv_for_benchmark.push_back((char*)argv[i]);
        }
    }
    // Update argc with all the changes made
    argc = (int)argv_for_benchmark.size();
    ::benchmark::Initialize(&argc, &argv_for_benchmark[0]);
    if (::benchmark::ReportUnrecognizedArguments(argc, &argv_for_benchmark[0]))
        return -1;
    ::benchmark::RunSpecifiedBenchmarks();
    return 0;
}
Exemple #2
0
 std::set<SessionId> WebSocketQueue::sessions() const {
     std::lock_guard<std::mutex> guard(mutex_);
     
     std::set<SessionId> sessions(sessions_);
     return sessions;
 }
bool EmailServiceProvider::connect()
{
    Q_D(EmailServiceProvider);

    Q_ASSERT(d->providerInfo);
    if (!d->providerInfo)
        return false;

    Q_ASSERT(!d->session && !d->service);
    if (d->session || d->service)
        return false;

    QScopedPointer<QList<vmime::ref<vmime::net::session> > > sessions(
        createSessionList(*d->providerInfo));
    Q_ASSERT(sessions);
    if (!sessions)
        return false;

    vmime::ref<vmime::net::session> session;
    vmime::ref<vmime::net::service> service;
    EmailServiceProviderInfo::ServiceTypes serviceType =
        d->providerInfo->serviceType();
    for(int i = 0; i < sessions->size(); ++i) {
        vmime::ref<vmime::net::session> currentSession = sessions->at(i);

        dumpToLog(currentSession);

        if (serviceType & EmailServiceProviderInfo::SMTP
            || serviceType & EmailServiceProviderInfo::SMTPS
            || serviceType & EmailServiceProviderInfo::SENDMAIL)
        {
            // transports
            try {
                vmime::ref<vmime::net::transport> transport =
                    currentSession->getTransport();
                transport->setTimeoutHandlerFactory(
                    vmime::create<EmailServiceTimeoutHandlerFactory>());

                if (d->dummyCert)
                    transport->setCertificateVerifier(
                        vmime::create<Security::DummyCertVerifier>());

                transport->connect();
                session = currentSession;
                service = transport;

                // break the for loop
                break;

            } catch (vmime::exception& e) {
                qLog() << e.what();
            }
        } else {
            // stores
            try {
                vmime::ref<vmime::net::store> store =
                    currentSession->getStore();
                store->setTimeoutHandlerFactory(
                    vmime::create<EmailServiceTimeoutHandlerFactory>());

                if (d->dummyCert)
                    store->setCertificateVerifier(
                        vmime::create<Security::DummyCertVerifier>());

                store->connect();
                session = currentSession;
                service = store;

                // break the for loop
                break;

            } catch (vmime::exception& e) {
                qLog() << e.what();
            }
        }
    }

    if (!session || !service)
        return false;

    d->session = session;
    d->service = service;
    return true;
}