#include "../Renderive/base/Tool.h" #include #include #include #include #include #include #include namespace { QPushButton* find_performance_button(QWidget* control) { const auto buttons = control->findChildren(); for (QPushButton* button : buttons) { if (button->text().contains("性能测试")) return button; } return nullptr; } void click_button(QPushButton* button) { QPoint pos = button->rect().center(); QMouseEvent press(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); QApplication::sendEvent(button, &press); QMouseEvent release(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::NoButton, Qt::NoModifier); QApplication::sendEvent(button, &release); } void double_click_button(QPushButton* button) { QPoint pos = button->rect().center(); QMouseEvent press(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); QApplication::sendEvent(button, &press); QMouseEvent release(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::NoButton, Qt::NoModifier); QApplication::sendEvent(button, &release); QMouseEvent double_click(QEvent::MouseButtonDblClick, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); QApplication::sendEvent(button, &double_click); QMouseEvent double_release(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::NoButton, Qt::NoModifier); QApplication::sendEvent(button, &double_release); } void click_plot(QWidget* plot, const QPoint& pos, QEvent::Type type) { QMouseEvent event(type, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); QApplication::sendEvent(plot, &event); } void wheel_plot(QWidget* plot, const QPoint& pos, int delta) { QWheelEvent event(pos, plot->mapToGlobal(pos), QPoint(), QPoint(0, delta), Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase, false); QApplication::sendEvent(plot, &event); } bool pump(QApplication& app, renderive::Plot& plot, int milliseconds) { QElapsedTimer timer; timer.start(); while (timer.elapsed() < milliseconds) { plot.mark_render_state_dirty(); app.processEvents(QEventLoop::AllEvents, 5); QThread::msleep(1); } return true; } } int main(int argc, char** argv) { qputenv("QT_QPA_PLATFORM", "offscreen"); qputenv("RENDERIVE_PERFORMANCE_LOG", "0"); QApplication app(argc, argv); renderive::start_render_scheduler(); renderive::Plot plot; plot.resize(320, 240); plot.init(); plot.show(); plot.start_render(240); std::unique_ptr control(create_control(&plot)); control->show(); app.processEvents(); QPushButton* performance_button = find_performance_button(control.get()); if (!performance_button) return 1; QElapsedTimer total; total.start(); for (int i = 0; i < 40; ++i) { click_button(performance_button); pump(app, plot, 15); if (total.elapsed() > 5000) return 2; } double_click_button(performance_button); pump(app, plot, 200); plot.set_use_performance_shower(true); pump(app, plot, 200); click_plot(&plot, QPoint(8, 8), QEvent::MouseButtonPress); click_plot(&plot, QPoint(8, 8), QEvent::MouseButtonRelease); click_plot(&plot, QPoint(8, 8), QEvent::MouseButtonDblClick); click_plot(&plot, QPoint(8, 8), QEvent::MouseButtonRelease); for (int i = 0; i < 12; ++i) { wheel_plot(&plot, QPoint(8, 8), -120); pump(app, plot, 10); } for (int i = 0; i < 12; ++i) { wheel_plot(&plot, QPoint(8, 8), 120); pump(app, plot, 10); } pump(app, plot, 200); if (!plot.get_use_performance_shower()) return 3; plot.pause_render(); return 0; }