ApiTrace::ApiTrace() : m_needsSaving(false) { m_loader = new TraceLoader(); connect(this, SIGNAL(loadTrace(QString)), m_loader, SLOT(loadTrace(QString))); connect(this, SIGNAL(requestFrame(ApiTraceFrame*)), m_loader, SLOT(loadFrame(ApiTraceFrame*))); connect(m_loader, SIGNAL(framesLoaded(const QList<ApiTraceFrame*>)), this, SLOT(addFrames(const QList<ApiTraceFrame*>))); connect(m_loader, SIGNAL(frameContentsLoaded(ApiTraceFrame*,QVector<ApiTraceCall*>, QVector<ApiTraceCall*>,quint64)), this, SLOT(loaderFrameLoaded(ApiTraceFrame*,QVector<ApiTraceCall*>,QVector<ApiTraceCall*>,quint64))); connect(m_loader, SIGNAL(guessedApi(int)), this, SLOT(guessedApi(int))); connect(m_loader, SIGNAL(finishedParsing()), this, SLOT(finishedParsing())); connect(this, SIGNAL(loaderSearch(ApiTrace::SearchRequest)), m_loader, SLOT(search(ApiTrace::SearchRequest))); connect(m_loader, SIGNAL(searchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*)), this, SLOT(loaderSearchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*))); connect(this, SIGNAL(loaderFindFrameStart(ApiTraceFrame*)), m_loader, SLOT(findFrameStart(ApiTraceFrame*))); connect(this, SIGNAL(loaderFindFrameEnd(ApiTraceFrame*)), m_loader, SLOT(findFrameEnd(ApiTraceFrame*))); connect(m_loader, SIGNAL(foundFrameStart(ApiTraceFrame*)), this, SIGNAL(foundFrameStart(ApiTraceFrame*))); connect(m_loader, SIGNAL(foundFrameEnd(ApiTraceFrame*)), this, SIGNAL(foundFrameEnd(ApiTraceFrame*))); connect(this, SIGNAL(loaderFindCallIndex(int)), m_loader, SLOT(findCallIndex(int))); connect(m_loader, SIGNAL(foundCallIndex(ApiTraceCall*)), this, SIGNAL(foundCallIndex(ApiTraceCall*))); connect(m_loader, SIGNAL(startedParsing()), this, SIGNAL(startedLoadingTrace())); connect(m_loader, SIGNAL(parsed(int)), this, SIGNAL(loaded(int))); connect(m_loader, SIGNAL(finishedParsing()), this, SIGNAL(finishedLoadingTrace())); m_saver = new SaverThread(this); connect(m_saver, SIGNAL(traceSaved()), this, SLOT(slotSaved())); connect(m_saver, SIGNAL(traceSaved()), this, SIGNAL(saved())); m_loaderThread = new QThread(); m_loader->moveToThread(m_loaderThread); m_loaderThread->start(); }
void TraceLoader::loadTrace(const QString &filename) { if (m_helpHash.isEmpty()) { loadHelpFile(); } if (!m_frameBookmarks.isEmpty()) { qDeleteAll(m_signatures); qDeleteAll(m_enumSignatures); m_signatures.clear(); m_enumSignatures.clear(); m_frameBookmarks.clear(); m_createdFrames.clear(); m_parser.close(); } if (!m_parser.open(filename.toLatin1())) { qDebug() << "error: failed to open " << filename; return; } emit startedParsing(); if (m_parser.supportsOffsets()) { scanTrace(); } else { //Load the entire file into memory parseTrace(); } emit guessedApi(static_cast<int>(m_parser.api)); emit finishedParsing(); }
void TraceLoader::loadTrace(const QString &filename) { if (m_helpHash.isEmpty()) { loadHelpFile(); } if (!m_frameBookmarks.isEmpty()) { qDeleteAll(m_signatures); m_signatures.clear(); m_frameBookmarks.clear(); m_createdFrames.clear(); m_parser.close(); } if (!m_parser.open(filename.toLatin1())) { qDebug() << "error: failed to open " << filename; return; } if (!m_parser.supportsOffsets()) { emit parseProblem( "This trace in compressed in a format that does not allow random seeking.\n" "Please repack the trace with `apitrace repack`." ); m_parser.close(); return; } emit startedParsing(); scanTrace(); emit guessedApi(static_cast<int>(m_parser.api)); emit finishedParsing(); }
void ParserManager::parse(EditorSource *source, QuantaXmlInputSource *inputSource, ParseResult *base, const DTDStruct *dtd, bool detailed) { emit startParsing(source); ParserStatus *parser = new ParserStatus(inputSource->newLocator(), xmlStateMachine()); DomBuilder *builder = new DomBuilder(); parser->setContentHandler(builder); parser->setLexicalHandler(builder); parser->setErrorHandler(builder); parser->setQuantaHandler(builder); parser->parse(inputSource); base->model = builder->model(); delete parser; delete builder; // m_parser->parse(source, base, dtd, detailed); emit finishedParsing(source, base); }
void ParserManager::rebuild(EditorSource *source, ParseResult *base, const DTDStruct *dtd, bool detailed) { emit startParsing(source); // m_parser->rebuild(source, base, dtd, detailed); emit finishedParsing(source, base); }