114 lines
		
	
	
	
		
			5.4 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
	
		
			5.4 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
 | 
						|
index 4205c92765af..c82360f146d1 100644
 | 
						|
--- a/content/renderer/renderer_blink_platform_impl.cc
 | 
						|
+++ b/content/renderer/renderer_blink_platform_impl.cc
 | 
						|
@@ -1021,8 +1021,10 @@ RendererBlinkPlatformImpl::CreateOffscreenGraphicsContext3DProvider(
 | 
						|
   attributes.sample_buffers = 0;
 | 
						|
   attributes.bind_generates_resource = false;
 | 
						|
   attributes.enable_raster_interface = web_attributes.enable_raster_interface;
 | 
						|
-  // Prefer discrete GPU for WebGL.
 | 
						|
-  attributes.gpu_preference = gl::PreferDiscreteGpu;
 | 
						|
+
 | 
						|
+  attributes.gpu_preference = web_attributes.prefer_integrated_gpu
 | 
						|
+      ? gl::PreferIntegratedGpu
 | 
						|
+      : gl::PreferDiscreteGpu;
 | 
						|
 
 | 
						|
   attributes.fail_if_major_perf_caveat =
 | 
						|
       web_attributes.fail_if_major_performance_caveat;
 | 
						|
diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h
 | 
						|
index f3ec52975650..920d161a1b81 100644
 | 
						|
--- a/third_party/blink/public/platform/platform.h
 | 
						|
+++ b/third_party/blink/public/platform/platform.h
 | 
						|
@@ -493,6 +493,7 @@ class BLINK_PLATFORM_EXPORT Platform {
 | 
						|
     kGLES3ContextType,   // GLES 3.0 context
 | 
						|
   };
 | 
						|
   struct ContextAttributes {
 | 
						|
+    bool prefer_integrated_gpu = false;
 | 
						|
     bool fail_if_major_performance_caveat = false;
 | 
						|
     ContextType context_type = kGLES2ContextType;
 | 
						|
     // Offscreen contexts usually share a surface for the default frame buffer
 | 
						|
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h b/third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h
 | 
						|
index 298e186289a0..5223ae30db6b 100644
 | 
						|
--- a/third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h
 | 
						|
+++ b/third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h
 | 
						|
@@ -30,6 +30,7 @@ class CORE_EXPORT CanvasContextCreationAttributesCore {
 | 
						|
   String pixel_format = "8-8-8-8";
 | 
						|
   bool premultiplied_alpha = true;
 | 
						|
   bool preserve_drawing_buffer = false;
 | 
						|
+  String power_preference = "default";
 | 
						|
   bool stencil = false;
 | 
						|
 
 | 
						|
   // This attribute is of type XRDevice, defined in modules/xr/XRDevice.h
 | 
						|
diff --git a/third_party/blink/renderer/modules/canvas/htmlcanvas/canvas_context_creation_attributes_module.idl b/third_party/blink/renderer/modules/canvas/htmlcanvas/canvas_context_creation_attributes_module.idl
 | 
						|
index 7b655dd12a77..8969eb7d98f3 100644
 | 
						|
--- a/third_party/blink/renderer/modules/canvas/htmlcanvas/canvas_context_creation_attributes_module.idl
 | 
						|
+++ b/third_party/blink/renderer/modules/canvas/htmlcanvas/canvas_context_creation_attributes_module.idl
 | 
						|
@@ -28,6 +28,12 @@ enum CanvasPixelFormat {
 | 
						|
     "float16",
 | 
						|
 };
 | 
						|
 
 | 
						|
+enum CanvasPowerPreference {
 | 
						|
+    "default",
 | 
						|
+    "low-power",
 | 
						|
+    "high-performance",
 | 
						|
+};
 | 
						|
+
 | 
						|
 [PermissiveDictionaryConversion]
 | 
						|
 dictionary CanvasContextCreationAttributesModule {
 | 
						|
     // This is an experimental feature, but it is not hidden behind a flag in
 | 
						|
@@ -47,6 +53,7 @@ dictionary CanvasContextCreationAttributesModule {
 | 
						|
     boolean antialias = true;
 | 
						|
     boolean premultipliedAlpha = true;
 | 
						|
     boolean preserveDrawingBuffer = false;
 | 
						|
+    CanvasPowerPreference powerPreference = "default";
 | 
						|
     boolean failIfMajorPerformanceCaveat = false;
 | 
						|
     [OriginTrialEnabled=WebXR] XRDevice compatibleXRDevice = null;
 | 
						|
 };
 | 
						|
diff --git a/third_party/blink/renderer/modules/webgl/webgl_context_attribute_helpers.cc b/third_party/blink/renderer/modules/webgl/webgl_context_attribute_helpers.cc
 | 
						|
index 7274af57b8ee..2a2737da1a56 100644
 | 
						|
--- a/third_party/blink/renderer/modules/webgl/webgl_context_attribute_helpers.cc
 | 
						|
+++ b/third_party/blink/renderer/modules/webgl/webgl_context_attribute_helpers.cc
 | 
						|
@@ -18,6 +18,7 @@ WebGLContextAttributes ToWebGLContextAttributes(
 | 
						|
   result.setAntialias(attrs.antialias);
 | 
						|
   result.setPremultipliedAlpha(attrs.premultiplied_alpha);
 | 
						|
   result.setPreserveDrawingBuffer(attrs.preserve_drawing_buffer);
 | 
						|
+  result.setPowerPreference(attrs.power_preference);
 | 
						|
   result.setFailIfMajorPerformanceCaveat(
 | 
						|
       attrs.fail_if_major_performance_caveat);
 | 
						|
   result.setCompatibleXRDevice(
 | 
						|
@@ -30,6 +31,7 @@ Platform::ContextAttributes ToPlatformContextAttributes(
 | 
						|
     unsigned web_gl_version,
 | 
						|
     bool support_own_offscreen_surface) {
 | 
						|
   Platform::ContextAttributes result;
 | 
						|
+  result.prefer_integrated_gpu = attrs.power_preference == "low-power";
 | 
						|
   result.fail_if_major_performance_caveat =
 | 
						|
       attrs.fail_if_major_performance_caveat;
 | 
						|
   result.context_type = web_gl_version == 2 ? Platform::kWebGL2ContextType
 | 
						|
diff --git a/third_party/blink/renderer/modules/webgl/webgl_context_attributes.idl b/third_party/blink/renderer/modules/webgl/webgl_context_attributes.idl
 | 
						|
index 38ca0f6b6a0c..90cfe8497daf 100644
 | 
						|
--- a/third_party/blink/renderer/modules/webgl/webgl_context_attributes.idl
 | 
						|
+++ b/third_party/blink/renderer/modules/webgl/webgl_context_attributes.idl
 | 
						|
@@ -26,6 +26,12 @@
 | 
						|
 
 | 
						|
 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2
 | 
						|
 
 | 
						|
+enum WebGLPowerPreference {
 | 
						|
+    "default",
 | 
						|
+    "low-power",
 | 
						|
+    "high-performance",
 | 
						|
+};
 | 
						|
+
 | 
						|
 dictionary WebGLContextAttributes {
 | 
						|
     boolean alpha = true;
 | 
						|
     boolean depth = true;
 | 
						|
@@ -33,6 +39,7 @@ dictionary WebGLContextAttributes {
 | 
						|
     boolean antialias = true;
 | 
						|
     boolean premultipliedAlpha = true;
 | 
						|
     boolean preserveDrawingBuffer = false;
 | 
						|
+    WebGLPowerPreference powerPreference = "default";
 | 
						|
     boolean failIfMajorPerformanceCaveat = false;
 | 
						|
     [OriginTrialEnabled=WebXR] XRDevice compatibleXRDevice = null;
 | 
						|
 };
 | 
						|
-- 
 | 
						|
2.17.0
 | 
						|
 |