From 2b7b24a0e039a18db8ab23475fbab44718f758a2 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 12 Jun 2017 15:28:13 -0700 Subject: Use QRandomGenerator instead of q?rand Change-Id: Icd0e0d4b27cb4e5eb892fffd14b5285d43f4afbf Reviewed-by: Simon Hausmann --- examples/quick/scenegraph/graph/noisynode.cpp | 3 ++- examples/quick/scenegraph/sgengine/window.cpp | 11 ++++---- src/particles/qquickangledirection.cpp | 6 ++--- src/particles/qquickcustomparticle.cpp | 4 +-- src/particles/qquickellipseextruder.cpp | 6 ++--- src/particles/qquickimageparticle.cpp | 13 +++++----- src/particles/qquicklineextruder.cpp | 6 ++--- src/particles/qquickmaskextruder.cpp | 3 ++- src/particles/qquickparticleemitter.cpp | 5 ++-- src/particles/qquickparticleextruder.cpp | 6 ++--- src/particles/qquickpointdirection.cpp | 6 ++--- src/particles/qquickrectangleextruder.cpp | 16 ++++++------ src/particles/qquicktargetdirection.cpp | 7 +++--- src/particles/qquicktrailemitter.cpp | 5 ++-- src/particles/qquickwander.cpp | 13 +++++----- src/qml/doc/src/cppintegration/definetypes.qdoc | 3 +-- src/qml/jsruntime/qv4mathobject.cpp | 14 ++--------- src/quick/items/qquicksprite.cpp | 5 ++-- src/quick/items/qquickspriteengine.cpp | 11 ++++---- src/quick/items/qquickspriteengine_p.h | 3 ++- tests/auto/qml/qqmlchangeset/tst_qqmlchangeset.cpp | 29 ++++++++++------------ .../auto/quick/qquicklistview/randomsortmodel.cpp | 5 ++-- tests/auto/quick/shared/viewtestutil.cpp | 6 ++--- tests/benchmarks/qml/holistic/testtypes.h | 5 ++-- tests/benchmarks/qml/painting/paintbenchmark.cpp | 3 ++- 25 files changed, 97 insertions(+), 97 deletions(-) diff --git a/examples/quick/scenegraph/graph/noisynode.cpp b/examples/quick/scenegraph/graph/noisynode.cpp index 834151599b..5658702f3a 100644 --- a/examples/quick/scenegraph/graph/noisynode.cpp +++ b/examples/quick/scenegraph/graph/noisynode.cpp @@ -40,6 +40,7 @@ #include "noisynode.h" +#include #include #include #include @@ -103,7 +104,7 @@ NoisyNode::NoisyNode(QQuickWindow *window) QImage image(NOISE_SIZE, NOISE_SIZE, QImage::Format_RGB32); uint *data = (uint *) image.bits(); for (int i=0; i #include #include +#include class Item { public: @@ -61,9 +62,9 @@ public: transformNode->appendChildNode(textureNode); parentNode->appendChildNode(transformNode); - int duration = qrand() / float(RAND_MAX) * 400 + 800; - rotAnimation.setStartValue(qrand() / float(RAND_MAX) * 720 - 180); - rotAnimation.setEndValue(qrand() / float(RAND_MAX) * 720 - 180); + int duration = QRandomGenerator::getReal() * 400 + 800; + rotAnimation.setStartValue(QRandomGenerator::getReal() * 720 - 180); + rotAnimation.setEndValue(QRandomGenerator::getReal() * 720 - 180); rotAnimation.setDuration(duration); rotAnimation.start(); @@ -171,8 +172,8 @@ void Window::addItems() QSGTexture *textures[] = { m_smileTexture.data(), m_qtTexture.data() }; for (int i = 0; i < 50; ++i) { QSGTexture *tex = textures[i%2]; - QPointF fromPos(-tex->textureSize().width(), qrand() / float(RAND_MAX) * (height() - tex->textureSize().height())); - QPointF toPos(width(), qrand() / float(RAND_MAX) * height() * 1.5 - height() * 0.25); + QPointF fromPos(-tex->textureSize().width(), QRandomGenerator::getReal() * (height() - tex->textureSize().height())); + QPointF toPos(width(), QRandomGenerator::getReal() * height() * 1.5 - height() * 0.25); m_items.append(QSharedPointer::create(m_sgRootNode.data(), tex, fromPos, toPos)); } update(); diff --git a/src/particles/qquickangledirection.cpp b/src/particles/qquickangledirection.cpp index debf52e49b..11a007ca09 100644 --- a/src/particles/qquickangledirection.cpp +++ b/src/particles/qquickangledirection.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qquickangledirection_p.h" -#include +#include #include QT_BEGIN_NAMESPACE @@ -108,8 +108,8 @@ QPointF QQuickAngleDirection::sample(const QPointF &from) { Q_UNUSED(from); QPointF ret; - qreal theta = m_angle*CONV - m_angleVariation*CONV + rand()/float(RAND_MAX) * m_angleVariation*CONV * 2; - qreal mag = m_magnitude- m_magnitudeVariation + rand()/float(RAND_MAX) * m_magnitudeVariation * 2; + qreal theta = m_angle*CONV - m_angleVariation*CONV + QRandomGenerator::getReal() * m_angleVariation*CONV * 2; + qreal mag = m_magnitude- m_magnitudeVariation + QRandomGenerator::getReal() * m_magnitudeVariation * 2; ret.setX(mag * qCos(theta)); ret.setY(mag * qSin(theta)); return ret; diff --git a/src/particles/qquickcustomparticle.cpp b/src/particles/qquickcustomparticle.cpp index a9645461a5..a2bcd91167 100644 --- a/src/particles/qquickcustomparticle.cpp +++ b/src/particles/qquickcustomparticle.cpp @@ -38,10 +38,10 @@ ****************************************************************************/ #include "qquickcustomparticle_p.h" +#include #include #include #include -#include QT_BEGIN_NAMESPACE @@ -425,7 +425,7 @@ void QQuickCustomParticle::buildData(QQuickOpenGLShaderEffectNode *rootNode) void QQuickCustomParticle::initialize(int gIdx, int pIdx) { QQuickParticleData* datum = m_system->groupData[gIdx]->data[pIdx]; - datum->r = rand()/(qreal)RAND_MAX; + datum->r = QRandomGenerator::getReal(); } void QQuickCustomParticle::commit(int gIdx, int pIdx) diff --git a/src/particles/qquickellipseextruder.cpp b/src/particles/qquickellipseextruder.cpp index bd3a95d684..fbb11b34cc 100644 --- a/src/particles/qquickellipseextruder.cpp +++ b/src/particles/qquickellipseextruder.cpp @@ -39,7 +39,7 @@ #include "qquickellipseextruder_p.h" #include -#include +#include QT_BEGIN_NAMESPACE /*! @@ -68,8 +68,8 @@ QQuickEllipseExtruder::QQuickEllipseExtruder(QObject *parent) : QPointF QQuickEllipseExtruder::extrude(const QRectF & r) { - qreal theta = ((qreal)rand()/RAND_MAX) * 6.2831853071795862; - qreal mag = m_fill ? ((qreal)rand()/RAND_MAX) : 1; + qreal theta = QRandomGenerator::bounded(2 * M_PI); + qreal mag = m_fill ? QRandomGenerator::getReal() : 1; return QPointF(r.x() + r.width()/2 + mag * (r.width()/2) * qCos(theta), r.y() + r.height()/2 + mag * (r.height()/2) * qSin(theta)); } diff --git a/src/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp index 1b3d2eed6b..8f809176a9 100644 --- a/src/particles/qquickimageparticle.cpp +++ b/src/particles/qquickimageparticle.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include "qquickimageparticle_p.h" #include "qquickparticleemitter_p.h" #include @@ -1729,9 +1730,9 @@ void QQuickImageParticle::initialize(int gIdx, int pIdx) if (!datum->rotationOwner) datum->rotationOwner = this; rotation = - (m_rotation + (m_rotationVariation - 2*((qreal)rand()/RAND_MAX)*m_rotationVariation) ) * CONV; + (m_rotation + (m_rotationVariation - 2*QRandomGenerator::bounded(m_rotationVariation)) ) * CONV; rotationVelocity = - (m_rotationVelocity + (m_rotationVelocityVariation - 2*((qreal)rand()/RAND_MAX)*m_rotationVelocityVariation) ) * CONV; + (m_rotationVelocity + (m_rotationVelocityVariation - 2*QRandomGenerator::bounded(m_rotationVelocityVariation)) ) * CONV; autoRotate = m_autoRotation?1.0:0.0; if (datum->rotationOwner == this) { datum->rotation = rotation; @@ -1750,10 +1751,10 @@ void QQuickImageParticle::initialize(int gIdx, int pIdx) if (m_explicitColor) { if (!datum->colorOwner) datum->colorOwner = this; - color.r = m_color.red() * (1 - redVariation) + rand() % 256 * redVariation; - color.g = m_color.green() * (1 - greenVariation) + rand() % 256 * greenVariation; - color.b = m_color.blue() * (1 - blueVariation) + rand() % 256 * blueVariation; - color.a = m_alpha * m_color.alpha() * (1 - m_alphaVariation) + rand() % 256 * m_alphaVariation; + color.r = m_color.red() * (1 - redVariation) + QRandomGenerator::bounded(256) * redVariation; + color.g = m_color.green() * (1 - greenVariation) + QRandomGenerator::bounded(256) * greenVariation; + color.b = m_color.blue() * (1 - blueVariation) + QRandomGenerator::bounded(256) * blueVariation; + color.a = m_alpha * m_color.alpha() * (1 - m_alphaVariation) + QRandomGenerator::bounded(256) * m_alphaVariation; if (datum->colorOwner == this) datum->color = color; else diff --git a/src/particles/qquicklineextruder.cpp b/src/particles/qquicklineextruder.cpp index 4bcd63543c..6ebd728407 100644 --- a/src/particles/qquicklineextruder.cpp +++ b/src/particles/qquicklineextruder.cpp @@ -37,7 +37,7 @@ ** ****************************************************************************/ #include "qquicklineextruder_p.h" -#include +#include #include /*! @@ -69,10 +69,10 @@ QPointF QQuickLineExtruder::extrude(const QRectF &r) { qreal x,y; if (!r.height()){ - x = r.width() * ((qreal)rand())/RAND_MAX; + x = r.width() * QRandomGenerator::getReal(); y = 0; }else{ - y = r.height() * ((qreal)rand())/RAND_MAX; + y = r.height() * QRandomGenerator::getReal(); if (!r.width()){ x = 0; }else{ diff --git a/src/particles/qquickmaskextruder.cpp b/src/particles/qquickmaskextruder.cpp index 93eaaf1a6f..60c23c55a8 100644 --- a/src/particles/qquickmaskextruder.cpp +++ b/src/particles/qquickmaskextruder.cpp @@ -42,6 +42,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE /*! \qmltype MaskShape @@ -102,7 +103,7 @@ QPointF QQuickMaskExtruder::extrude(const QRectF &r) ensureInitialized(r); if (!m_mask.count() || m_img.isNull()) return r.topLeft(); - const QPointF p = m_mask[rand() % m_mask.count()]; + const QPointF p = m_mask[QRandomGenerator::bounded(m_mask.count())]; //### Should random sub-pixel positioning be added? return p + r.topLeft(); } diff --git a/src/particles/qquickparticleemitter.cpp b/src/particles/qquickparticleemitter.cpp index 9bed25dba6..d18250d706 100644 --- a/src/particles/qquickparticleemitter.cpp +++ b/src/particles/qquickparticleemitter.cpp @@ -40,6 +40,7 @@ #include "qquickparticleemitter_p.h" #include #include +#include QT_BEGIN_NAMESPACE @@ -424,7 +425,7 @@ void QQuickParticleEmitter::emitWindow(int timeStamp) datum->t = pt; datum->lifeSpan = (m_particleDuration - + ((rand() % ((m_particleDurationVariation*2) + 1)) - m_particleDurationVariation)) + + (QRandomGenerator::bounded((m_particleDurationVariation*2) + 1) - m_particleDurationVariation)) / 1000.0; if (datum->lifeSpan >= m_system->maxLife){ @@ -461,7 +462,7 @@ void QQuickParticleEmitter::emitWindow(int timeStamp) // Particle size float sizeVariation = -m_particleSizeVariation - + rand() / float(RAND_MAX) * m_particleSizeVariation * 2; + + QRandomGenerator::bounded(m_particleSizeVariation * 2); float size = qMax((qreal)0.0 , m_particleSize + sizeVariation); float endSize = qMax((qreal)0.0 , sizeAtEnd + sizeVariation); diff --git a/src/particles/qquickparticleextruder.cpp b/src/particles/qquickparticleextruder.cpp index f1fef58884..74b450921f 100644 --- a/src/particles/qquickparticleextruder.cpp +++ b/src/particles/qquickparticleextruder.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qquickparticleextruder_p.h" -#include +#include QT_BEGIN_NAMESPACE @@ -59,8 +59,8 @@ QQuickParticleExtruder::QQuickParticleExtruder(QObject *parent) : QPointF QQuickParticleExtruder::extrude(const QRectF &rect) { - return QPointF(((qreal)rand() / RAND_MAX) * rect.width() + rect.x(), - ((qreal)rand() / RAND_MAX) * rect.height() + rect.y()); + return QPointF(QRandomGenerator::getReal() * rect.width() + rect.x(), + QRandomGenerator::getReal() * rect.height() + rect.y()); } bool QQuickParticleExtruder::contains(const QRectF &bounds, const QPointF &point) diff --git a/src/particles/qquickpointdirection.cpp b/src/particles/qquickpointdirection.cpp index 8d602204b5..7b5c9bada1 100644 --- a/src/particles/qquickpointdirection.cpp +++ b/src/particles/qquickpointdirection.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qquickpointdirection_p.h" -#include +#include QT_BEGIN_NAMESPACE @@ -78,8 +78,8 @@ QQuickPointDirection::QQuickPointDirection(QObject *parent) : QPointF QQuickPointDirection::sample(const QPointF &) { QPointF ret; - ret.setX(m_x - m_xVariation + rand() / float(RAND_MAX) * m_xVariation * 2); - ret.setY(m_y - m_yVariation + rand() / float(RAND_MAX) * m_yVariation * 2); + ret.setX(m_x - m_xVariation + QRandomGenerator::getReal() * m_xVariation * 2); + ret.setY(m_y - m_yVariation + QRandomGenerator::getReal() * m_yVariation * 2); return ret; } diff --git a/src/particles/qquickrectangleextruder.cpp b/src/particles/qquickrectangleextruder.cpp index cb166f1d50..6474f61630 100644 --- a/src/particles/qquickrectangleextruder.cpp +++ b/src/particles/qquickrectangleextruder.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qquickrectangleextruder_p.h" -#include +#include QT_BEGIN_NAMESPACE @@ -60,21 +60,21 @@ QQuickRectangleExtruder::QQuickRectangleExtruder(QObject *parent) : QPointF QQuickRectangleExtruder::extrude(const QRectF &rect) { if (m_fill) - return QPointF(((qreal)rand() / RAND_MAX) * rect.width() + rect.x(), - ((qreal)rand() / RAND_MAX) * rect.height() + rect.y()); - int side = rand() % 4; + return QPointF(QRandomGenerator::getReal() * rect.width() + rect.x(), + QRandomGenerator::getReal() * rect.height() + rect.y()); + int side = QRandomGenerator::bounded(4); switch (side){//TODO: Doesn't this overlap the corners? case 0: return QPointF(rect.x(), - ((qreal)rand() / RAND_MAX) * rect.height() + rect.y()); + QRandomGenerator::getReal() * rect.height() + rect.y()); case 1: return QPointF(rect.width() + rect.x(), - ((qreal)rand() / RAND_MAX) * rect.height() + rect.y()); + QRandomGenerator::getReal() * rect.height() + rect.y()); case 2: - return QPointF(((qreal)rand() / RAND_MAX) * rect.width() + rect.x(), + return QPointF(QRandomGenerator::getReal() * rect.width() + rect.x(), rect.y()); default: - return QPointF(((qreal)rand() / RAND_MAX) * rect.width() + rect.x(), + return QPointF(QRandomGenerator::getReal() * rect.width() + rect.x(), rect.height() + rect.y()); } } diff --git a/src/particles/qquicktargetdirection.cpp b/src/particles/qquicktargetdirection.cpp index ee805b4e39..96b78a53b4 100644 --- a/src/particles/qquicktargetdirection.cpp +++ b/src/particles/qquicktargetdirection.cpp @@ -41,6 +41,7 @@ #include "qquickparticleemitter_p.h" #include #include +#include QT_BEGIN_NAMESPACE /*! @@ -117,10 +118,10 @@ QPointF QQuickTargetDirection::sample(const QPointF &from) targetX = m_targetX; targetY = m_targetY; } - targetX += 0 - from.x() - m_targetVariation + rand()/(float)RAND_MAX * m_targetVariation*2; - targetY += 0 - from.y() - m_targetVariation + rand()/(float)RAND_MAX * m_targetVariation*2; + targetX += 0 - from.x() - m_targetVariation + QRandomGenerator::getReal() * m_targetVariation*2; + targetY += 0 - from.y() - m_targetVariation + QRandomGenerator::getReal() * m_targetVariation*2; qreal theta = std::atan2(targetY, targetX); - qreal mag = m_magnitude + rand()/(float)RAND_MAX * m_magnitudeVariation * 2 - m_magnitudeVariation; + qreal mag = m_magnitude + QRandomGenerator::getReal() * m_magnitudeVariation * 2 - m_magnitudeVariation; if (m_proportionalMagnitude) mag *= std::sqrt(targetX * targetX + targetY * targetY); ret.setX(mag * std::cos(theta)); diff --git a/src/particles/qquicktrailemitter.cpp b/src/particles/qquicktrailemitter.cpp index a5bf0e9d21..14075f6b23 100644 --- a/src/particles/qquicktrailemitter.cpp +++ b/src/particles/qquicktrailemitter.cpp @@ -40,6 +40,7 @@ #include "qquicktrailemitter_p.h" #include #include +#include #include QT_BEGIN_NAMESPACE @@ -207,7 +208,7 @@ void QQuickTrailEmitter::emitWindow(int timeStamp) datum->t = pt; datum->lifeSpan = (m_particleDuration - + ((rand() % ((m_particleDurationVariation*2) + 1)) - m_particleDurationVariation)) + + (QRandomGenerator::bounded((m_particleDurationVariation*2) + 1) - m_particleDurationVariation)) / 1000.0; // Particle position @@ -240,7 +241,7 @@ void QQuickTrailEmitter::emitWindow(int timeStamp) // Particle size float sizeVariation = -m_particleSizeVariation - + rand() / float(RAND_MAX) * m_particleSizeVariation * 2; + + QRandomGenerator::getReal() * m_particleSizeVariation * 2; float size = qMax((qreal)0.0, m_particleSize + sizeVariation); float endSize = qMax((qreal)0.0, sizeAtEnd + sizeVariation); diff --git a/src/particles/qquickwander.cpp b/src/particles/qquickwander.cpp index 099b453808..cfdede440b 100644 --- a/src/particles/qquickwander.cpp +++ b/src/particles/qquickwander.cpp @@ -39,6 +39,7 @@ #include "qquickwander_p.h" #include "qquickparticlesystem_p.h"//for ParticlesVertices +#include QT_BEGIN_NAMESPACE /*! \qmltype Wander @@ -102,8 +103,8 @@ WanderData* QQuickWanderAffector::getData(int idx) d->y_vel = 0; d->x_peak = m_xVariance; d->y_peak = m_yVariance; - d->x_var = m_pace * qreal(qrand()) / RAND_MAX; - d->y_var = m_pace * qreal(qrand()) / RAND_MAX; + d->x_var = m_pace * QRandomGenerator::getReal(); + d->y_var = m_pace * QRandomGenerator::getReal(); m_wanderData.insert(idx, d); return d; @@ -124,7 +125,7 @@ bool QQuickWanderAffector::affectParticle(QQuickParticleData* data, qreal dt) if (m_xVariance != 0.) { if ((d->x_vel > d->x_peak && d->x_var > 0.0) || (d->x_vel < -d->x_peak && d->x_var < 0.0)) { d->x_var = -d->x_var; - d->x_peak = m_xVariance + m_xVariance * qreal(qrand()) / RAND_MAX; + d->x_peak = m_xVariance + m_xVariance * QRandomGenerator::getReal(); } d->x_vel += d->x_var * dt; } @@ -133,7 +134,7 @@ bool QQuickWanderAffector::affectParticle(QQuickParticleData* data, qreal dt) if (m_yVariance != 0.) { if ((d->y_vel > d->y_peak && d->y_var > 0.0) || (d->y_vel < -d->y_peak && d->y_var < 0.0)) { d->y_var = -d->y_var; - d->y_peak = m_yVariance + m_yVariance * qreal(qrand()) / RAND_MAX; + d->y_peak = m_yVariance + m_yVariance * QRandomGenerator::getReal(); } d->y_vel += d->y_var * dt; } @@ -146,8 +147,8 @@ bool QQuickWanderAffector::affectParticle(QQuickParticleData* data, qreal dt) p->y += dy; return true; */ - qreal dx = dt * m_pace * (2 * qreal(qrand())/RAND_MAX - 1); - qreal dy = dt * m_pace * (2 * qreal(qrand())/RAND_MAX - 1); + qreal dx = dt * m_pace * (2 * QRandomGenerator::getReal() - 1); + qreal dy = dt * m_pace * (2 * QRandomGenerator::getReal() - 1); qreal newX, newY; switch (m_affectedParameter){ case Position: diff --git a/src/qml/doc/src/cppintegration/definetypes.qdoc b/src/qml/doc/src/cppintegration/definetypes.qdoc index 1ce00c6ad0..91f916c699 100644 --- a/src/qml/doc/src/cppintegration/definetypes.qdoc +++ b/src/qml/doc/src/cppintegration/definetypes.qdoc @@ -606,7 +606,6 @@ public: RandomNumberGenerator(QObject *parent) : QObject(parent), m_maxValue(100) { - qsrand(QDateTime::currentMSecsSinceEpoch() / 1000); QObject::connect(&m_timer, SIGNAL(timeout()), SLOT(updateProperty())); m_timer.start(500); } @@ -621,7 +620,7 @@ signals: private slots: void updateProperty() { - m_targetProperty.write(qrand() % m_maxValue); + m_targetProperty.write(QRandomGenerator::bounded(m_maxValue)); } private: diff --git a/src/qml/jsruntime/qv4mathobject.cpp b/src/qml/jsruntime/qv4mathobject.cpp index 2d9d81c64b..6fd1509d77 100644 --- a/src/qml/jsruntime/qv4mathobject.cpp +++ b/src/qml/jsruntime/qv4mathobject.cpp @@ -42,6 +42,7 @@ #include #include +#include #include #include @@ -271,20 +272,9 @@ void MathObject::method_pow(const BuiltinFunction *, Scope &scope, CallData *cal RETURN_RESULT(Encode(qt_qnan())); } -Q_GLOBAL_STATIC(QThreadStorage, seedCreatedStorage); - void MathObject::method_random(const BuiltinFunction *, Scope &scope, CallData *) { - if (!seedCreatedStorage()->hasLocalData()) { - int msecs = QTime(0,0,0).msecsTo(QTime::currentTime()); - Q_ASSERT(msecs >= 0); - qsrand(uint(uint(msecs) ^ reinterpret_cast(scope.engine))); - seedCreatedStorage()->setLocalData(new bool(true)); - } - // rand()/qrand() return a value where the upperbound is RAND_MAX inclusive. So, instead of - // dividing by RAND_MAX (which would return 0..RAND_MAX inclusive), we divide by RAND_MAX + 1. - qint64 upperLimit = qint64(RAND_MAX) + 1; - RETURN_RESULT(Encode(qrand() / double(upperLimit))); + RETURN_RESULT(Encode(QRandomGenerator::getReal())); } void MathObject::method_round(const BuiltinFunction *, Scope &scope, CallData *callData) diff --git a/src/quick/items/qquicksprite.cpp b/src/quick/items/qquicksprite.cpp index aae657b749..8013c57938 100644 --- a/src/quick/items/qquicksprite.cpp +++ b/src/quick/items/qquicksprite.cpp @@ -40,6 +40,7 @@ #include "qquicksprite_p.h" #include #include +#include QT_BEGIN_NAMESPACE @@ -236,12 +237,12 @@ int QQuickSprite::variedDuration() const //Deals with precedence when multiple d if (m_frameRate != unsetDuration) { qreal fpms = (m_frameRate - + (m_frameRateVariation * ((qreal)qrand()/RAND_MAX) * 2) + + (m_frameRateVariation * QRandomGenerator::getReal() * 2) - m_frameRateVariation) / 1000.0; return qMax(qreal(0.0) , m_frames / fpms); } else if (m_frameDuration != unsetDuration) { int mspf = m_frameDuration - + (m_frameDurationVariation * ((qreal)qrand()/RAND_MAX) * 2) + + (m_frameDurationVariation * QRandomGenerator::getReal() * 2) - m_frameDurationVariation; return qMax(0, m_frames * mspf); } else if (duration() >= 0) { diff --git a/src/quick/items/qquickspriteengine.cpp b/src/quick/items/qquickspriteengine.cpp index 92b60a8e3a..9deb223957 100644 --- a/src/quick/items/qquickspriteengine.cpp +++ b/src/quick/items/qquickspriteengine.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -543,7 +544,7 @@ void QQuickStochasticEngine::restart(int index) if (m_addAdvance) m_startTimes[index] += m_advanceTime.elapsed(); if (randomStart) - m_startTimes[index] -= qrand() % m_duration.at(index); + m_startTimes[index] -= QRandomGenerator::bounded(m_duration.at(index)); int time = m_duration.at(index) + m_startTimes.at(index); for (int i=0; iframeSync()) {//Manually advanced m_startTimes[index] = 0; if (randomStart && m_sprites.at(m_things.at(index))->m_generatedCount) - m_startTimes[index] += qrand() % m_sprites.at(m_things.at(index))->m_generatedCount; + m_startTimes[index] += QRandomGenerator::bounded(m_sprites.at(m_things.at(index))->m_generatedCount); } else { m_startTimes[index] = m_timeOffset; if (m_addAdvance) m_startTimes[index] += m_advanceTime.elapsed(); if (randomStart) - m_startTimes[index] -= qrand() % m_duration.at(index); + m_startTimes[index] -= QRandomGenerator::bounded(m_duration.at(index)); int time = spriteDuration(index) + m_startTimes.at(index); if (randomStart) { int curTime = m_timeOffset + (m_addAdvance ? m_advanceTime.elapsed() : 0); @@ -629,7 +630,7 @@ int QQuickStochasticEngine::nextState(int curState, int curThing) int nextIdx = -1; int goalPath = goalSeek(curState, curThing); if (goalPath == -1){//Random - qreal r =(qreal) qrand() / (qreal) RAND_MAX; + qreal r = QRandomGenerator::getReal(); qreal total = 0.0; for (QVariantMap::const_iterator iter=m_states.at(curState)->m_to.constBegin(); iter!=m_states.at(curState)->m_to.constEnd(); ++iter) @@ -719,7 +720,7 @@ int QQuickStochasticEngine::goalSeek(int curIdx, int spriteIdx, int dist) if (options.count()==1) return *(options.begin()); int option = -1; - qreal r =(qreal) qrand() / (qreal) RAND_MAX; + qreal r = QRandomGenerator::getReal(); qreal total = 0; for (QSet::const_iterator iter=options.constBegin(); iter!=options.constEnd(); ++iter) diff --git a/src/quick/items/qquickspriteengine_p.h b/src/quick/items/qquickspriteengine_p.h index 90ee68b2f6..4e5458a938 100644 --- a/src/quick/items/qquickspriteengine_p.h +++ b/src/quick/items/qquickspriteengine_p.h @@ -63,6 +63,7 @@ QT_REQUIRE_CONFIG(quick_sprite); #include #include #include +#include #include #include @@ -112,7 +113,7 @@ public: virtual int variedDuration() const { return qMax(qreal(0.0) , m_duration - + (m_durationVariation * ((qreal)qrand()/RAND_MAX) * 2) + + (m_durationVariation * QRandomGenerator::bounded(2.0)) - m_durationVariation); } diff --git a/tests/auto/qml/qqmlchangeset/tst_qqmlchangeset.cpp b/tests/auto/qml/qqmlchangeset/tst_qqmlchangeset.cpp index da7956a5fb..65ac1ef320 100644 --- a/tests/auto/qml/qqmlchangeset/tst_qqmlchangeset.cpp +++ b/tests/auto/qml/qqmlchangeset/tst_qqmlchangeset.cpp @@ -26,6 +26,7 @@ ** ****************************************************************************/ #include +#include #include class tst_qqmlchangeset : public QObject @@ -1462,23 +1463,19 @@ void tst_qqmlchangeset::debug() void tst_qqmlchangeset::random_data() { - QTest::addColumn("seed"); QTest::addColumn("combinations"); QTest::addColumn("depth"); - QTest::newRow("1*5") << 32 << 1 << 5; - QTest::newRow("2*2") << 32 << 2 << 2; - QTest::newRow("3*2") << 32 << 3 << 2; - QTest::newRow("3*5") << 32 << 3 << 5; + QTest::newRow("1*5") << 1 << 5; + QTest::newRow("2*2") << 2 << 2; + QTest::newRow("3*2") << 3 << 2; + QTest::newRow("3*5") << 3 << 5; } void tst_qqmlchangeset::random() { - QFETCH(int, seed); QFETCH(int, combinations); QFETCH(int, depth); - qsrand(seed); - int failures = 0; for (int i = 0; i < 20000; ++i) { QQmlChangeSet accumulatedSet; @@ -1490,27 +1487,27 @@ void tst_qqmlchangeset::random() for (int j = 0; j < combinations; ++j) { QQmlChangeSet set; for (int k = 0; k < depth; ++k) { - switch (-(qrand() % 3)) { + switch (-QRandomGenerator::bounded(3)) { case InsertOp: { - int index = qrand() % (modelCount + 1); - int count = qrand() % 5 + 1; + int index = QRandomGenerator::bounded(modelCount + 1); + int count = QRandomGenerator::bounded(5) + 1; set.insert(index, count); input.append(Insert(index, count)); modelCount += count; break; } case RemoveOp: { - const int index = qrand() % (modelCount + 1); - const int count = qrand() % (modelCount - index + 1); + const int index = QRandomGenerator::bounded(modelCount + 1); + const int count = QRandomGenerator::bounded(modelCount - index + 1); set.remove(index, count); input.append(Remove(index, count)); modelCount -= count; break; } case MoveOp: { - const int from = qrand() % (modelCount + 1); - const int count = qrand() % (modelCount - from + 1); - const int to = qrand() % (modelCount - count + 1); + const int from = QRandomGenerator::bounded(modelCount + 1); + const int count = QRandomGenerator::bounded(modelCount - from + 1); + const int to = QRandomGenerator::bounded(modelCount - count + 1); const int moveId = moveCount++; set.move(from, to, count, moveId); input.append(Move(from, to, count, moveId)); diff --git a/tests/auto/quick/qquicklistview/randomsortmodel.cpp b/tests/auto/quick/qquicklistview/randomsortmodel.cpp index 7affb182c0..7c4bd5111c 100644 --- a/tests/auto/quick/qquicklistview/randomsortmodel.cpp +++ b/tests/auto/quick/qquicklistview/randomsortmodel.cpp @@ -27,6 +27,7 @@ ****************************************************************************/ #include "randomsortmodel.h" +#include RandomSortModel::RandomSortModel(QObject* parent): QAbstractListModel(parent) @@ -73,14 +74,14 @@ QVariant RandomSortModel::data(const QModelIndex& index, int role) const void RandomSortModel::randomize() { - const int row = qrand() % mData.count(); + const int row = QRandomGenerator::bounded(mData.count()); int random; bool exists = false; // Make sure we won't end up with two items with the same weight, as that // would make unit-testing much harder do { exists = false; - random = qrand() % (mData.count() * 10); + random = QRandomGenerator::bounded(mData.count() * 10); QList >::ConstIterator iter, end; for (iter = mData.constBegin(), end = mData.constEnd(); iter != end; ++iter) { if ((*iter).second == random) { diff --git a/tests/auto/quick/shared/viewtestutil.cpp b/tests/auto/quick/shared/viewtestutil.cpp index cb2b8be97a..a33c5eae96 100644 --- a/tests/auto/quick/shared/viewtestutil.cpp +++ b/tests/auto/quick/shared/viewtestutil.cpp @@ -28,6 +28,7 @@ #include "viewtestutil.h" +#include #include #include #include @@ -356,7 +357,6 @@ QQuickViewTestUtil::StressTestModel::StressTestModel() t->setInterval(500); t->start(); - qsrand(qHash(QDateTime::currentDateTime())); connect(t, &QTimer::timeout, this, &StressTestModel::updateModel); } @@ -374,7 +374,7 @@ void QQuickViewTestUtil::StressTestModel::updateModel() { if (m_rowCount > 10) { for (int i = 0; i < 10; ++i) { - int rnum = qrand() % m_rowCount; + int rnum = QRandomGenerator::bounded(m_rowCount); beginRemoveRows(QModelIndex(), rnum, rnum); m_rowCount--; endRemoveRows(); @@ -382,7 +382,7 @@ void QQuickViewTestUtil::StressTestModel::updateModel() } if (m_rowCount < 20) { for (int i = 0; i < 10; ++i) { - int rnum = qrand() % m_rowCount; + int rnum = QRandomGenerator::bounded(m_rowCount); beginInsertRows(QModelIndex(), rnum, rnum); m_rowCount++; endInsertRows(); diff --git a/tests/benchmarks/qml/holistic/testtypes.h b/tests/benchmarks/qml/holistic/testtypes.h index a752a8585b..29ebe97f39 100644 --- a/tests/benchmarks/qml/holistic/testtypes.h +++ b/tests/benchmarks/qml/holistic/testtypes.h @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -223,7 +224,7 @@ public: { QPixmap pv(150, 150); pv.fill(Qt::green); - int choice = qrand() % 4; + int choice = QRandomGenerator::bounded(4); switch (choice) { case 0: setArbitraryVariant(QVariant(QString(QLatin1String("string variant value")))); break; case 1: setArbitraryVariant(QVariant(QColor(110, 120, 130))); break; @@ -253,7 +254,7 @@ public: QVariant retn; QPixmap pv(randomFactorOne % 300, randomFactorTwo % 300); pv.fill(QColor(randomFactorOne % 256, randomFactorTwo % 256, randomFactorThree % 256)); - int choice = qrand() % 4; + int choice = QRandomGenerator::bounded(4); switch (choice) { case 0: retn = QVariant(QString(QLatin1String("string variant value"))); break; case 1: retn = QVariant(QColor(randomFactorThree % 256, randomFactorTwo % 256, randomFactorOne % 256)); break; diff --git a/tests/benchmarks/qml/painting/paintbenchmark.cpp b/tests/benchmarks/qml/painting/paintbenchmark.cpp index 0a9dee4664..98d8d7c16a 100644 --- a/tests/benchmarks/qml/painting/paintbenchmark.cpp +++ b/tests/benchmarks/qml/painting/paintbenchmark.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include int iterations = 20; @@ -321,7 +322,7 @@ public: int len = strlen(chars); for (int i = 0; i < lines; ++i) { for (int j = 0; j < 60; j++) { - strings[i] += QChar(chars[rand() % len]); + strings[i] += QChar(chars[QRandomGenerator::bounded(len)]); } } } -- cgit v1.2.3