Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(124)

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 2698573002: Support offscreen contexts which own their backing surface (Closed)
Patch Set: Review comments, merge in crrev 2586803003 Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * 12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #include "modules/webgl/WebGLRenderingContextBase.h" 26 #include "modules/webgl/WebGLRenderingContextBase.h"
27 27
28 #include <memory>
28 #include "bindings/core/v8/ExceptionMessages.h" 29 #include "bindings/core/v8/ExceptionMessages.h"
29 #include "bindings/core/v8/ExceptionState.h" 30 #include "bindings/core/v8/ExceptionState.h"
30 #include "bindings/core/v8/ScriptWrappableVisitor.h" 31 #include "bindings/core/v8/ScriptWrappableVisitor.h"
31 #include "bindings/core/v8/V8BindingMacros.h" 32 #include "bindings/core/v8/V8BindingMacros.h"
32 #include "bindings/modules/v8/HTMLCanvasElementOrOffscreenCanvas.h" 33 #include "bindings/modules/v8/HTMLCanvasElementOrOffscreenCanvas.h"
33 #include "bindings/modules/v8/WebGLAny.h" 34 #include "bindings/modules/v8/WebGLAny.h"
34 #include "core/dom/DOMArrayBuffer.h" 35 #include "core/dom/DOMArrayBuffer.h"
35 #include "core/dom/DOMTypedArray.h" 36 #include "core/dom/DOMTypedArray.h"
36 #include "core/dom/FlexibleArrayBufferView.h" 37 #include "core/dom/FlexibleArrayBufferView.h"
37 #include "core/dom/TaskRunnerHelper.h" 38 #include "core/dom/TaskRunnerHelper.h"
38 #include "core/frame/ImageBitmap.h" 39 #include "core/frame/ImageBitmap.h"
39 #include "core/frame/LocalFrame.h" 40 #include "core/frame/LocalFrame.h"
40 #include "core/frame/Settings.h" 41 #include "core/frame/Settings.h"
41 #include "core/html/HTMLCanvasElement.h" 42 #include "core/html/HTMLCanvasElement.h"
42 #include "core/html/HTMLImageElement.h" 43 #include "core/html/HTMLImageElement.h"
43 #include "core/html/HTMLVideoElement.h" 44 #include "core/html/HTMLVideoElement.h"
44 #include "core/html/ImageData.h" 45 #include "core/html/ImageData.h"
45 #include "core/inspector/ConsoleMessage.h" 46 #include "core/inspector/ConsoleMessage.h"
46 #include "core/inspector/InspectorInstrumentation.h" 47 #include "core/inspector/InspectorInstrumentation.h"
47 #include "core/layout/LayoutBox.h" 48 #include "core/layout/LayoutBox.h"
48 #include "core/loader/FrameLoader.h" 49 #include "core/loader/FrameLoader.h"
49 #include "core/loader/FrameLoaderClient.h" 50 #include "core/loader/FrameLoaderClient.h"
51 #include "core/origin_trials/OriginTrials.h"
50 #include "gpu/command_buffer/client/gles2_interface.h" 52 #include "gpu/command_buffer/client/gles2_interface.h"
51 #include "modules/webgl/ANGLEInstancedArrays.h" 53 #include "modules/webgl/ANGLEInstancedArrays.h"
52 #include "modules/webgl/EXTBlendMinMax.h" 54 #include "modules/webgl/EXTBlendMinMax.h"
53 #include "modules/webgl/EXTFragDepth.h" 55 #include "modules/webgl/EXTFragDepth.h"
54 #include "modules/webgl/EXTShaderTextureLOD.h" 56 #include "modules/webgl/EXTShaderTextureLOD.h"
55 #include "modules/webgl/EXTTextureFilterAnisotropic.h" 57 #include "modules/webgl/EXTTextureFilterAnisotropic.h"
56 #include "modules/webgl/GLStringQuery.h" 58 #include "modules/webgl/GLStringQuery.h"
57 #include "modules/webgl/OESElementIndexUint.h" 59 #include "modules/webgl/OESElementIndexUint.h"
58 #include "modules/webgl/OESStandardDerivatives.h" 60 #include "modules/webgl/OESStandardDerivatives.h"
59 #include "modules/webgl/OESTextureFloat.h" 61 #include "modules/webgl/OESTextureFloat.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 #include "platform/graphics/gpu/AcceleratedImageBufferSurface.h" 97 #include "platform/graphics/gpu/AcceleratedImageBufferSurface.h"
96 #include "platform/graphics/gpu/SharedGpuContext.h" 98 #include "platform/graphics/gpu/SharedGpuContext.h"
97 #include "public/platform/Platform.h" 99 #include "public/platform/Platform.h"
98 #include "skia/ext/texture_handle.h" 100 #include "skia/ext/texture_handle.h"
99 #include "wtf/CheckedNumeric.h" 101 #include "wtf/CheckedNumeric.h"
100 #include "wtf/Functional.h" 102 #include "wtf/Functional.h"
101 #include "wtf/PtrUtil.h" 103 #include "wtf/PtrUtil.h"
102 #include "wtf/text/StringBuilder.h" 104 #include "wtf/text/StringBuilder.h"
103 #include "wtf/text/StringUTF8Adaptor.h" 105 #include "wtf/text/StringUTF8Adaptor.h"
104 #include "wtf/typed_arrays/ArrayBufferContents.h" 106 #include "wtf/typed_arrays/ArrayBufferContents.h"
105 #include <memory>
106 107
107 namespace blink { 108 namespace blink {
108 109
109 namespace { 110 namespace {
110 111
111 const double secondsBetweenRestoreAttempts = 1.0; 112 const double secondsBetweenRestoreAttempts = 1.0;
112 const int maxGLErrorsAllowedToConsole = 256; 113 const int maxGLErrorsAllowedToConsole = 256;
113 const unsigned maxGLActiveContexts = 16; 114 const unsigned maxGLActiveContexts = 16;
114 const unsigned maxGLActiveContextsOnWorker = 4; 115 const unsigned maxGLActiveContextsOnWorker = 4;
115 116
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 ScriptState* scriptState, 618 ScriptState* scriptState,
618 const CanvasContextCreationAttributes& attributes, 619 const CanvasContextCreationAttributes& attributes,
619 unsigned webGLVersion) { 620 unsigned webGLVersion) {
620 // Exactly one of these must be provided. 621 // Exactly one of these must be provided.
621 DCHECK_EQ(!canvas, !!scriptState); 622 DCHECK_EQ(!canvas, !!scriptState);
622 // The canvas is only given on the main thread. 623 // The canvas is only given on the main thread.
623 DCHECK(!canvas || isMainThread()); 624 DCHECK(!canvas || isMainThread());
624 625
625 Platform::ContextAttributes contextAttributes = 626 Platform::ContextAttributes contextAttributes =
626 toPlatformContextAttributes(attributes, webGLVersion); 627 toPlatformContextAttributes(attributes, webGLVersion);
628
629 // If there's a possibility this context may be used with WebVR make sure it
630 // is created with an offscreen surface that can be swapped out for a
631 // VR-specific surface if needed. We can only check the origin trial
632 // if called with a scriptState, not for a canvas.
amp 2017/02/15 20:04:22 Comment seems out of sync with code which does che
klausw 2017/02/15 20:21:15 Done.
633 //
634 // At this time, treat this as an experimental rendering optimization
635 // that needs a separate opt-in. See crbug.com/691102 for details.
636 if (RuntimeEnabledFeatures::webVRExperimentalRenderingEnabled()) {
637 if (RuntimeEnabledFeatures::webVREnabled() ||
638 OriginTrials::webVREnabled(
639 canvas ? canvas->document().getExecutionContext()
640 : scriptState->getExecutionContext())) {
641 DVLOG(1) << "Requesting supportOwnOffscreenSurface";
642 contextAttributes.supportOwnOffscreenSurface = true;
643 }
644 }
645
627 Platform::GraphicsInfo glInfo; 646 Platform::GraphicsInfo glInfo;
628 std::unique_ptr<WebGraphicsContext3DProvider> contextProvider; 647 std::unique_ptr<WebGraphicsContext3DProvider> contextProvider;
629 const auto& url = canvas ? canvas->document().topDocument().url() 648 const auto& url = canvas ? canvas->document().topDocument().url()
630 : scriptState->getExecutionContext()->url(); 649 : scriptState->getExecutionContext()->url();
631 if (isMainThread()) { 650 if (isMainThread()) {
632 contextProvider = WTF::wrapUnique( 651 contextProvider = WTF::wrapUnique(
633 Platform::current()->createOffscreenGraphicsContext3DProvider( 652 Platform::current()->createOffscreenGraphicsContext3DProvider(
634 contextAttributes, url, 0, &glInfo)); 653 contextAttributes, url, 0, &glInfo));
635 } else { 654 } else {
636 contextProvider = 655 contextProvider =
(...skipping 7161 matching lines...) Expand 10 before | Expand all | Expand 10 after
7798 7817
7799 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas( 7818 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas(
7800 HTMLCanvasElementOrOffscreenCanvas& result) const { 7819 HTMLCanvasElementOrOffscreenCanvas& result) const {
7801 if (canvas()) 7820 if (canvas())
7802 result.setHTMLCanvasElement(canvas()); 7821 result.setHTMLCanvasElement(canvas());
7803 else 7822 else
7804 result.setOffscreenCanvas(offscreenCanvas()); 7823 result.setOffscreenCanvas(offscreenCanvas());
7805 } 7824 }
7806 7825
7807 } // namespace blink 7826 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698