Move multiple calls to random() out of parameter lists so that the
evaluation order is consistent across compilers.
git-svn-id: http://skia.googlecode.com/svn/trunk@2173 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/points.cpp b/gm/points.cpp
index ff535cd..4aa6597 100644
--- a/gm/points.cpp
+++ b/gm/points.cpp
@@ -28,8 +28,14 @@
}
static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) {
- for (size_t i = 0; i < n; i++)
- pts[i].set(rand->nextUScalar1() * 640, rand->nextUScalar1() * 480);
+ for (size_t i = 0; i < n; i++) {
+ // Compute these independently and store in variables, rather
+ // than in the parameter-passing expression, to get consistent
+ // evaluation order across compilers.
+ float y = rand->nextUScalar1() * 480;
+ float x = rand->nextUScalar1() * 640;
+ pts[i].set(x, y);
+ }
}
virtual void onDraw(SkCanvas* canvas) {
diff --git a/gm/strokerects.cpp b/gm/strokerects.cpp
index 29d8cb0..44c0120 100644
--- a/gm/strokerects.cpp
+++ b/gm/strokerects.cpp
@@ -38,9 +38,11 @@
SkScalar y = rand.nextUScalar1() * H;
SkScalar w = rand.nextUScalar1() * (W >> 2);
SkScalar h = rand.nextUScalar1() * (H >> 2);
+ SkScalar hoffset = rand.nextSScalar1();
+ SkScalar woffset = rand.nextSScalar1();
r->set(x, y, x + w, y + h);
- r->offset(-w/2 + rand.nextSScalar1(), -h/2 + + rand.nextSScalar1());
+ r->offset(-w/2 + woffset, -h/2 + hoffset);
}
virtual void onDraw(SkCanvas* canvas) {
diff --git a/gm/strokes.cpp b/gm/strokes.cpp
index 862a517..d8b21b2 100644
--- a/gm/strokes.cpp
+++ b/gm/strokes.cpp
@@ -25,9 +25,11 @@
SkScalar y = rand.nextUScalar1() * H;
SkScalar w = rand.nextUScalar1() * (W >> 2);
SkScalar h = rand.nextUScalar1() * (H >> 2);
+ SkScalar hoffset = rand.nextSScalar1();
+ SkScalar woffset = rand.nextSScalar1();
r->set(x, y, x + w, y + h);
- r->offset(-w/2 + rand.nextSScalar1(), -h/2 + + rand.nextSScalar1());
+ r->offset(-w/2 + woffset, -h/2 + hoffset);
paint->setColor(rand.nextU());
paint->setAlpha(0xFF);