Add skia_enable_discrete_gpu argument to GN

This forces all of our testing tools to run with the discrete GPU in
laptop systems that have that option.

BUG=skia:

Change-Id: Ibd7629d6de5f063cdf219b3c7469210af5085d90
Reviewed-on: https://skia-review.googlesource.com/6474
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/tools/gpu/GrContextFactory.cpp b/tools/gpu/GrContextFactory.cpp
index 8d9bd41..bd745bc 100644
--- a/tools/gpu/GrContextFactory.cpp
+++ b/tools/gpu/GrContextFactory.cpp
@@ -24,6 +24,20 @@
 #include "gl/GrGLGpu.h"
 #include "GrCaps.h"
 
+#if defined(SK_BUILD_FOR_WIN32) && defined(SK_ENABLE_DISCRETE_GPU)
+extern "C" {
+    // NVIDIA documents that the presence and value of this symbol programmatically enable the high
+    // performance GPU in laptops with switchable graphics.
+    //   https://docs.nvidia.com/gameworks/content/technologies/desktop/optimus.htm
+    // From testing, including this symbol, even if it is set to 0, we still get the NVIDIA GPU.
+    _declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001;
+
+    // AMD has a similar mechanism, although I don't have an AMD laptop, so this is untested.
+    //   https://community.amd.com/thread/169965
+    __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
+}
+#endif
+
 namespace sk_gpu_test {
 GrContextFactory::GrContextFactory() { }