Simplify the creation of OS-specific windows and timers in the samples.

BUG=angle:521

Change-Id: I9550269e9cd67fc24246853bec3c1f67cb16da2a
Reviewed-on: https://chromium-review.googlesource.com/211130
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/samples/angle/sample_util/SampleApplication.cpp b/samples/angle/sample_util/SampleApplication.cpp
index 4d15b03..0a29359 100644
--- a/samples/angle/sample_util/SampleApplication.cpp
+++ b/samples/angle/sample_util/SampleApplication.cpp
@@ -6,13 +6,6 @@
 
 #include "SampleApplication.h"
 
-#ifdef _WIN32
-#include "win32/Win32Timer.h"
-#include "win32/Win32Window.h"
-#else
-#error unsupported OS.
-#endif
-
 SampleApplication::SampleApplication(const std::string& name, size_t width, size_t height,
                                      EGLint glesMajorVersion, EGLint requestedRenderer)
     : mSurface(EGL_NO_SURFACE),
@@ -24,10 +17,8 @@
       mHeight(height),
       mName(name),
       mRunning(false),
-#ifdef _WIN32
-      mTimer(new Win32Timer()),
-      mWindow(new Win32Window())
-#endif
+      mTimer(CreateTimer()),
+      mWindow(CreateSampleWindow())
 {
 }
 
diff --git a/samples/angle/sample_util/Timer.h b/samples/angle/sample_util/Timer.h
index b86cf85..8e7f4d4 100644
--- a/samples/angle/sample_util/Timer.h
+++ b/samples/angle/sample_util/Timer.h
@@ -15,4 +15,6 @@
     virtual double getElapsedTime() const = 0;
 };
 
+Timer *CreateTimer();
+
 #endif // SAMPLE_UTIL_TIMER_H
diff --git a/samples/angle/sample_util/Window.h b/samples/angle/sample_util/Window.h
index d0cdf85..9d29cd4 100644
--- a/samples/angle/sample_util/Window.h
+++ b/samples/angle/sample_util/Window.h
@@ -40,4 +40,6 @@
     std::list<Event> mEvents;
 };
 
+Window *CreateSampleWindow();
+
 #endif // SAMPLE_UTIL_WINDOW_H
diff --git a/samples/angle/sample_util/win32/Win32Timer.cpp b/samples/angle/sample_util/win32/Win32Timer.cpp
index c4345bf..1ace360 100644
--- a/samples/angle/sample_util/win32/Win32Timer.cpp
+++ b/samples/angle/sample_util/win32/Win32Timer.cpp
@@ -51,3 +51,8 @@
 
     return static_cast<double>(endTime - mStartTime) / mFrequency;
 }
+
+Timer *CreateTimer()
+{
+    return new Win32Timer();
+}
diff --git a/samples/angle/sample_util/win32/Win32Window.cpp b/samples/angle/sample_util/win32/Win32Window.cpp
index 93f6a18..eae5548 100644
--- a/samples/angle/sample_util/win32/Win32Window.cpp
+++ b/samples/angle/sample_util/win32/Win32Window.cpp
@@ -469,3 +469,8 @@
 
     SetCursorPos(topLeft.x + x, topLeft.y + y);
 }
+
+Window *CreateSampleWindow()
+{
+    return new Win32Window();
+}