diff --git a/bench/PathBench.cpp b/bench/PathBench.cpp
index 967f501..057a2b0 100644
--- a/bench/PathBench.cpp
+++ b/bench/PathBench.cpp
@@ -183,7 +183,7 @@
         name->append("long_curved");
     }
     virtual void makePath(SkPath* path) SK_OVERRIDE {
-        SkMWCRandom rand (12);
+        SkRandom rand (12);
         int i;
         for (i = 0; i < 100; i++) {
             path->quadTo(SkScalarMul(rand.nextUScalar1(), SkIntToScalar(640)),
@@ -208,7 +208,7 @@
         name->append("long_line");
     }
     virtual void makePath(SkPath* path) SK_OVERRIDE {
-        SkMWCRandom rand;
+        SkRandom rand;
         path->moveTo(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480);
         for (size_t i = 1; i < 100; i++) {
             path->lineTo(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480);
@@ -316,7 +316,7 @@
     int                         fCurrPath;
     int                         fCurrVerb;
     int                         fCurrPoint;
-    SkMWCRandom                 fRandom;
+    SkRandom                    fRandom;
     typedef SkBenchmark INHERITED;
 };
 
@@ -653,7 +653,7 @@
             paint.setStyle(SkPaint::kStroke_Style);
         }
 
-        SkMWCRandom rand;
+        SkRandom rand;
 
         SkRect r;
 
@@ -754,7 +754,7 @@
     }
 
     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
-        SkMWCRandom rand;
+        SkRandom rand;
         SkRect r;
 
         for (int i = 0; i < 5000; ++i) {
@@ -834,7 +834,7 @@
     virtual void onPreDraw() SK_OVERRIDE {
         fQueryRects.setCount(kQueryRectCnt);
 
-        SkMWCRandom rand;
+        SkRandom rand;
         for (int i = 0; i < kQueryRectCnt; ++i) {
             SkSize size;
             SkPoint xy;
@@ -931,7 +931,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-static void rand_conic(SkConic* conic, SkMWCRandom& rand) {
+static void rand_conic(SkConic* conic, SkRandom& rand) {
     for (int i = 0; i < 3; ++i) {
         conic->fPts[i].set(rand.nextUScalar1() * 100, rand.nextUScalar1() * 100);
     }
@@ -945,7 +945,7 @@
 class ConicBench : public SkBenchmark {
 public:
     ConicBench(void* param) : INHERITED(param) {
-        SkMWCRandom rand;
+        SkRandom rand;
         for (int i = 0; i < CONICS; ++i) {
             rand_conic(&fConics[i], rand);
         }
