void QmlProfilerToolTest::testClearEvents() { QmlProfilerTool profilerTool; QmlProfilerModelManager *modelManager = profilerTool.modelManager(); QVERIFY(modelManager); QmlProfilerStateManager *stateManager = profilerTool.stateManager(); QVERIFY(stateManager); stateManager->setCurrentState(QmlProfilerStateManager::AppRunning); stateManager->setServerRecording(true); QCOMPARE(modelManager->numEventTypes(), 0); QCOMPARE(modelManager->numEvents(), 0); const int typeIndex = modelManager->appendEventType(QmlEventType()); QCOMPARE(typeIndex, 0); modelManager->appendEvent(QmlEvent(0, typeIndex, "")); QCOMPARE(modelManager->numEventTypes(), 1); QCOMPARE(modelManager->numEvents(), 1); stateManager->setServerRecording(false); QCOMPARE(modelManager->numEventTypes(), 1); QCOMPARE(modelManager->numEvents(), 1); stateManager->setServerRecording(true); // clears previous events, but not types QCOMPARE(modelManager->numEventTypes(), 1); QCOMPARE(modelManager->numEvents(), 0); modelManager->appendEvent(QmlEvent(0, typeIndex, "")); QCOMPARE(modelManager->numEventTypes(), 1); QCOMPARE(modelManager->numEvents(), 1); }
//////////////////////////////////////////////////////////////// // Context menu void QmlProfilerTraceView::contextMenuEvent(QContextMenuEvent *ev) { QMenu menu; QAction *viewAllAction = 0; QAction *getLocalStatsAction = 0; QAction *getGlobalStatsAction = 0; QmlProfilerTool *profilerTool = qobject_cast<QmlProfilerTool *>(d->m_profilerTool); QPoint position = ev->globalPos(); if (profilerTool) { QList <QAction *> commonActions = profilerTool->profilerContextMenuActions(); foreach (QAction *act, commonActions) { menu.addAction(act); } }
//////////////////////////////////////////////////////////////// // Context menu void QmlProfilerTraceView::contextMenuEvent(QContextMenuEvent *ev) { QMenu menu; QAction *viewAllAction = 0; QmlProfilerTool *profilerTool = qobject_cast<QmlProfilerTool *>(d->m_profilerTool); if (profilerTool) menu.addActions(profilerTool->profilerContextMenuActions()); menu.addSeparator(); QAction *getLocalStatsAction = menu.addAction(tr("Limit Events Pane to Current Range")); if (!d->m_viewContainer->hasValidSelection()) getLocalStatsAction->setEnabled(false); QAction *getGlobalStatsAction = menu.addAction(tr("Reset Events Pane")); if (d->m_viewContainer->hasGlobalStats()) getGlobalStatsAction->setEnabled(false); if (!d->m_modelProxy->isEmpty()) { menu.addSeparator(); viewAllAction = menu.addAction(tr("Reset Zoom")); } QAction *selectedAction = menu.exec(ev->globalPos()); if (selectedAction) { if (selectedAction == viewAllAction) { d->m_zoomControl->setRange( d->m_modelManager->traceTime()->startTime(), d->m_modelManager->traceTime()->endTime()); } if (selectedAction == getLocalStatsAction) { d->m_viewContainer->getStatisticsInRange( d->m_viewContainer->selectionStart(), d->m_viewContainer->selectionEnd()); } if (selectedAction == getGlobalStatsAction) { d->m_viewContainer->getStatisticsInRange(-1, -1); } } }
void QmlProfilerTraceView::showContextMenu(QPoint position) { QMenu menu; QAction *viewAllAction = 0; QmlProfilerTool *profilerTool = qobject_cast<QmlProfilerTool *>(d->m_profilerTool); if (profilerTool) menu.addActions(profilerTool->profilerContextMenuActions()); menu.addSeparator(); QAction *getLocalStatsAction = menu.addAction(tr("Limit Events Pane to Current Range")); if (!d->m_viewContainer->hasValidSelection()) getLocalStatsAction->setEnabled(false); QAction *getGlobalStatsAction = menu.addAction(tr("Show Full Range in Events Pane")); if (d->m_viewContainer->hasGlobalStats()) getGlobalStatsAction->setEnabled(false); if (d->m_zoomControl->traceDuration() > 0) { menu.addSeparator(); viewAllAction = menu.addAction(tr("Reset Zoom")); } QAction *selectedAction = menu.exec(position); if (selectedAction) { if (selectedAction == viewAllAction) { d->m_zoomControl->setRange(d->m_zoomControl->traceStart(), d->m_zoomControl->traceEnd()); } if (selectedAction == getLocalStatsAction) { d->m_viewContainer->getStatisticsInRange( d->m_viewContainer->selectionStart(), d->m_viewContainer->selectionEnd()); } if (selectedAction == getGlobalStatsAction) d->m_viewContainer->getStatisticsInRange(-1, -1); } }
void QmlProfilerToolTest::testAttachToWaitingApplication() { auto newKit = std::make_unique<ProjectExplorer::Kit>("fookit"); ProjectExplorer::Kit * newKitPtr = newKit.get(); ProjectExplorer::KitManager *kitManager = ProjectExplorer::KitManager::instance(); QVERIFY(kitManager); QVERIFY(kitManager->registerKit(std::move(newKit))); QSettings *settings = Core::ICore::settings(); QVERIFY(settings); settings->setValue(QLatin1String("AnalyzerQmlAttachDialog/kitId"), newKitPtr->id().toSetting()); QmlProfilerTool profilerTool; QmlProfilerClientManager *clientManager = profilerTool.clientManager(); clientManager->setRetryInterval(10); clientManager->setMaximumRetries(10); connect(clientManager, &QmlProfilerClientManager::connectionFailed, clientManager, &QmlProfilerClientManager::retryConnect); QTcpServer server; QUrl serverUrl = Utils::urlFromLocalHostAndFreePort(); QVERIFY(serverUrl.port() >= 0); QVERIFY(serverUrl.port() <= std::numeric_limits<quint16>::max()); server.listen(QHostAddress::Any, static_cast<quint16>(serverUrl.port())); QScopedPointer<QTcpSocket> connection; connect(&server, &QTcpServer::newConnection, this, [&]() { connection.reset(server.nextPendingConnection()); fakeDebugServer(connection.data()); }); QTimer timer; timer.setInterval(100); bool modalSeen = false; connect(&timer, &QTimer::timeout, this, [&]() { if (QWidget *activeModal = QApplication::activeModalWidget()) { modalSeen = true; auto dialog = qobject_cast<QmlProfilerAttachDialog *>(activeModal); if (dialog) { dialog->setPort(serverUrl.port()); dialog->accept(); timer.stop(); } else { qWarning() << "Some other modal widget popped up:" << activeModal; activeModal->close(); } } }); timer.start(); ProjectExplorer::RunControl *runControl = profilerTool.attachToWaitingApplication(); QVERIFY(runControl); QTRY_VERIFY(connection); QTRY_VERIFY(runControl->isRunning()); QTRY_VERIFY(modalSeen); QTRY_VERIFY(!timer.isActive()); QTRY_VERIFY(clientManager->isConnected()); connection.reset(); QTRY_VERIFY(runControl->isStopped()); }