101 lines
3.8 KiB
C++
101 lines
3.8 KiB
C++
#include "../Renderive/base/Tool.h"
|
|
#include <QApplication>
|
|
#include <QElapsedTimer>
|
|
#include <QMouseEvent>
|
|
#include <QPushButton>
|
|
#include <QThread>
|
|
#include <QWheelEvent>
|
|
#include <memory>
|
|
namespace {
|
|
QPushButton* find_performance_button(QWidget* control) {
|
|
const auto buttons = control->findChildren<QPushButton*>();
|
|
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<QWidget> 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;
|
|
}
|