Esempio n. 1
0
void Processor::registerFree(int index, context_t context, timestamp_t timestamp,
					const char* res_type, resource_id_t res_id) {
	resource_map_t::iterator iter = res_type ? resource_registry.find(res_type) : resource_registry.begin();
	if (iter == resource_registry.end()) {
		throw std::runtime_error(Formatter() << "Unknown resource type: " << res_type);
	}
	ResourceRegistry* registry = iter->second.get();
	// apply resource filter
	const std::string& resource_filter = Options::getInstance()->getResourceFilter();
	if (!resource_filter.empty() && resource_filter != registry->resource.name) return;

	event_ptr_t event(new EventFree(index, context, timestamp, res_id, 0));
	// validate event upon specified filters
	if (!FilterManager::getInstance()->validate(event.get())) return;

	// find the allocation event for the resource to be freed in local cache.
	event_ptr_t alloc_event;
	int rc = registry->registerFree(event, alloc_event);
	if (rc != ResourceRegistry::BLOCK_SCOPE) {
		event->res_size = alloc_event->res_size;
	}
	// only process deallocation events that are done for resources allocated in our scope
	if (rc > 0) {
		for (generator_list_t::iterator iter = generators.begin(); iter != generators.end();) {
			ReportGenerator* generator = iter->get();
			// report the generic allocation event
			if (generator->reportFree(&registry->resource, event, alloc_event) == ReportGenerator::ABORT) {
				// remove generator if the event reporting failed and generator cannot continue
				generator_list_t::iterator iter_del = iter++;
				generators.erase(iter_del);
				continue;
			}
			if (!context_registry.empty()) {
				// report the allocation event in matching contexts.
				for (context_map_t::iterator ctx_iter = context_registry.begin(); ctx_iter != context_registry.end(); ctx_iter++) {
					if (ctx_iter->second.get()->id & context) {
						generator->reportFreeInContext(&registry->resource, ctx_iter->second.get(), event, alloc_event);
					}
				}
				if (!context) generator->reportFreeInContext(&registry->resource, &context_none, event, alloc_event);
			}
			iter++;
		}
	}
}
Esempio n. 2
0
void Processor::registerAlloc(int index, context_t context, timestamp_t timestamp,
					const char* res_type, resource_id_t res_id, size_t res_size) {
	resource_map_t::iterator iter = res_type ? resource_registry.find(res_type) : resource_registry.begin();
	if (iter == resource_registry.end()) {
		throw std::runtime_error(Formatter() << "Unknown resource type: " << res_type);
	}
	ResourceRegistry* registry = iter->second.get();
	// apply resource filter
	const std::string& resource_filter = Options::getInstance()->getResourceFilter();
	if (!resource_filter.empty() && resource_filter != registry->resource.name) return;
	// create new event
	event_ptr_t event(new EventAlloc(index, context, timestamp, res_id, res_size));
	// validate event upon specified filters
	if (!FilterManager::getInstance()->validate(event.get())) return;

	// register event in local cache
	event_ptr_t old_event;
	int rc = registry->registerAlloc(event, old_event);
	// TODO: FIRE_EXISTS is returned if an event with the same id was already registered
	// probably would be good to show some warning message or something.
	if (rc > 0) {
		for (generator_list_t::iterator iter = generators.begin(); iter != generators.end(); ) {
			ReportGenerator* generator = iter->get();
			// report the generic allocation event
			if (generator->reportAlloc(&registry->resource, event) == ReportGenerator::ABORT) {
				// remove generator if the event reporting failed and generator cannot continue
				generator_list_t::iterator iter_del = iter++;
				generators.erase(iter_del);
				continue;
			}
			if (!context_registry.empty()) {
				// report the allocation event in matching contexts.
				for (context_map_t::iterator ctx_iter = context_registry.begin(); ctx_iter != context_registry.end(); ctx_iter++) {
					if (ctx_iter->second.get()->id & context) {
						generator->reportAllocInContext(&registry->resource, ctx_iter->second.get(), event);
					}
				}
				if (!context) generator->reportAllocInContext(&registry->resource, &context_none, event);
			}
			iter++;
		}
	}
}
Esempio n. 3
0
QString ReportDialog::generateHtmlReport( bool embedded )
{
    HtmlWriter writer;
    writer.setEmbedded( embedded );

    if ( m_source == ProjectSource ) {
        ProjectSummaryGenerator generator;
        generator.setProject( m_projectId );

        writer.setTitle( generator.title() );
        generator.write( &writer, HtmlText::NoInternalLinks );
    } else {
        ReportGenerator generator;

        if ( m_source == FolderSource ) {
            if ( m_folderId != 0 )
                generator.setFolderSource( m_folderId, m_issues );
            else if ( m_typeId != 0 )
                generator.setGlobalListSource( m_typeId, m_issues );

            if ( m_tableButton->isChecked() )
                generator.setTableMode( m_currentColumns );
            else if ( m_fullTableButton->isChecked() )
                generator.setTableMode( m_availableColumns );
            else
                generator.setSummaryMode( false, IssueDetailsGenerator::NoHistory );
        } else if ( m_source == IssueSource && !m_issues.isEmpty() ) {
            generator.setIssueSource( m_issues.first() );
            generator.setSummaryMode( true, m_fullReportButton->isChecked() ? m_history : IssueDetailsGenerator::NoHistory );
        }

        writer.setTitle( generator.title() );
        generator.write( &writer );
    }

    return writer.toHtml();
}
Esempio n. 4
0
int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);

    QSqlDatabase db = createDataBase(":memory:");

    if (argc < 2) {

        // Try stdin
        QFile in;
        in.open(stdin, QIODevice::ReadOnly);
        QByteArray xml = in.readAll();

        if (xml.isEmpty()) {
            qDebug() << "Usage: chart xml-file [xml-file2 xml-file3 ...]";
            qDebug() << "See also QTestLib's \"-chart\" option";
            return 0;
        } else {
            loadXml(xml, QString());
        }
    }

    QStringList files;
    for (int i = 1; i < argc; i++) {
        QString file = QString::fromLocal8Bit(argv[i]);
        files += file;
    }

    if (files.isEmpty() == false)
        loadXml(files);

    ReportGenerator reportGenerator;
    reportGenerator.writeReports();

    db.close();
}
Esempio n. 5
0
int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);

    if (argc < 2) {
        qDebug() << "Usage: generatereport xml-file [xml-file2 xml-file3 ...]";
        return 0;
    }

    QStringList files;
    for (int i = 1; i < argc; i++) {
        QString file = QString::fromLocal8Bit(argv[i]);
        files += file;
        qDebug() << "Reading xml from" << file;
    }

    QSqlDatabase db = createDataBase(":memory:");

    loadXml(files);

    ReportGenerator reportGenerator;
    reportGenerator.writeReports();
    db.close();
}
Esempio n. 6
0
QString ReportDialog::generateCsvReport()
{
    ReportGenerator generator;

    if ( m_folderId != 0 )
        generator.setFolderSource( m_folderId, m_issues );
    else if ( m_typeId != 0 )
        generator.setGlobalListSource( m_typeId, m_issues );

    if ( m_tableButton->isChecked() )
        generator.setTableMode( m_currentColumns );
    else if ( m_fullTableButton->isChecked() )
        generator.setTableMode( m_availableColumns );

    CsvWriter writer;
    generator.write( &writer );

    return writer.toString();
}