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(®istry->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(®istry->resource, ctx_iter->second.get(), event, alloc_event); } } if (!context) generator->reportFreeInContext(®istry->resource, &context_none, event, alloc_event); } iter++; } } }
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(®istry->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(®istry->resource, ctx_iter->second.get(), event); } } if (!context) generator->reportAllocInContext(®istry->resource, &context_none, event); } iter++; } } }
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(); }
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(); }
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(); }
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(); }