Пример #1
0
void FlameGraphModel::finalize()
{
    foreach (FlameGraphData *child, m_stackBottom.children)
        m_stackBottom.duration += child->duration;

    loadNotes(-1, false);
    endResetModel();
}
Пример #2
0
bool QmlProfilerFileReader::loadQtd(QIODevice *device)
{
    QXmlStreamReader stream(device);

    bool validVersion = true;

    while (validVersion && !stream.atEnd() && !stream.hasError()) {
        if (isCanceled())
            return false;
        QXmlStreamReader::TokenType token = stream.readNext();
        const QStringRef elementName = stream.name();
        switch (token) {
        case QXmlStreamReader::StartDocument :  continue;
        case QXmlStreamReader::StartElement : {
            if (elementName == _("trace")) {
                QXmlStreamAttributes attributes = stream.attributes();
                if (attributes.hasAttribute(_("version")))
                    validVersion = attributes.value(_("version")) == _(PROFILER_FILE_VERSION);
                else
                    validVersion = false;
                if (attributes.hasAttribute(_("traceStart")))
                    m_traceStart = attributes.value(_("traceStart")).toLongLong();
                if (attributes.hasAttribute(_("traceEnd")))
                    m_traceEnd = attributes.value(_("traceEnd")).toLongLong();
            }

            if (elementName == _("eventData")) {
                loadEventTypes(stream);
                emit typesLoaded(m_eventTypes);
                break;
            }

            if (elementName == _("profilerDataModel")) {
                loadEvents(stream);
                break;
            }

            if (elementName == _("noteData")) {
                loadNotes(stream);
                emit notesLoaded(m_notes);
                break;
            }

            break;
        }
        default: break;
        }
    }

    if (stream.hasError()) {
        emit error(tr("Error while parsing trace data file: %1").arg(stream.errorString()));
        return false;
    } else {
        emit success();
        return true;
    }
}
Пример #3
0
void NotesModel::refresh(const bool full) {
    if (full) {
        updateGitStatus();
        QtConcurrent::run(this, &NotesModel::pullMergePush);
    }
    beginResetModel();
    m_notes.clear();
    loadNotes(notesFolder());
    endResetModel();
}
Пример #4
0
int XmlNotes::loadNotes()
{
    //DEBUG_FUNC_NAME
    QFile file(m_fileName);
    doc.clear();
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        myWarning() << "cannot read the file " << file.fileName() << "error = " << file.errorString();
        return 1;
    }
    if(!doc.setContent(&file)) {
        myWarning() << "the file isn't valid";
        file.close();
        return 1;
    }
    if(doc.documentElement().isElement() && !doc.documentElement().isNull()) {
        QDomElement e = doc.documentElement();
        const QString oldVersion = e.attribute("version", "0.1");
        if(oldVersion == "0.1") {
            //errror to old version
            myWarning() << "too old version " << e.attribute("version", "0.1") << " current is " << m_version;
            file.close();
            //make backup
            QDir dir(m_fileName);
            dir.rename(m_fileName, m_fileName + ".bak");

            loadNotes();
            return 2;
        } else if(oldVersion == "0.2" && oldVersion != m_version) {
            m_oldVersion = "0.2";
        } else if(oldVersion == "0.3" && oldVersion != m_version) {
            m_oldVersion = "0.3";
        }
    }
    file.close();
    m_isLoaded = true;
    return 0;
}
Пример #5
0
void FlameGraphModel::loadData(qint64 rangeStart, qint64 rangeEnd)
{
    const bool checkRanges = (rangeStart != -1) && (rangeEnd != -1);
    if (m_modelManager->state() == QmlProfilerModelManager::ClearingData) {
        beginResetModel();
        clear();
        endResetModel();
        return;
    } else if (m_modelManager->state() != QmlProfilerModelManager::ProcessingData &&
               m_modelManager->state() != QmlProfilerModelManager::Done) {
        return;
    }

    beginResetModel();
    clear();

    const QVector<QmlProfilerDataModel::QmlEventData> &eventList
            = m_modelManager->qmlModel()->getEvents();
    const QVector<QmlProfilerDataModel::QmlEventTypeData> &typesList
            = m_modelManager->qmlModel()->getEventTypes();

    // used by binding loop detection
    QStack<const QmlProfilerDataModel::QmlEventData *> callStack;
    callStack.append(0);
    FlameGraphData *stackTop = &m_stackBottom;

    for (int i = 0; i < eventList.size(); ++i) {
        const QmlProfilerDataModel::QmlEventData *event = &eventList[i];
        int typeIndex = event->typeIndex();
        const QmlProfilerDataModel::QmlEventTypeData *type = &typesList[typeIndex];

        if (!m_acceptedTypes.contains(type->rangeType))
            continue;

        if (checkRanges) {
            if ((event->startTime() + event->duration() < rangeStart)
                    || (event->startTime() > rangeEnd))
                continue;
        }

        const QmlProfilerDataModel::QmlEventData *potentialParent = callStack.top();
        while (potentialParent &&
               potentialParent->startTime() + potentialParent->duration() <= event->startTime()) {
            callStack.pop();
            stackTop = stackTop->parent;
            potentialParent = callStack.top();
        }

        callStack.push(event);
        stackTop = pushChild(stackTop, event);

        m_modelManager->modelProxyCountUpdated(m_modelId, i, eventList.count());
    }

    foreach (FlameGraphData *child, m_stackBottom.children)
        m_stackBottom.duration += child->duration;

    loadNotes(-1, false);

    m_modelManager->modelProxyCountUpdated(m_modelId, 1, 1);
    endResetModel();
}