summaryrefslogtreecommitdiffstats
path: root/src/core/delegated_frame_node.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Update Chromium to version 40.0.2214.28 and ninja to 1.5.3.Zeno Albisser2015-01-201-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * scoped_refptr operator for implicit conversion to pointer has been disabled upstream: https://codereview.chromium.org/510323002 * Group permission API as done upstream: https://codereview.chromium.org/622793002 * content_worker gyp target has been removed upstream. * GetPageThumbnailData moved to DevToolsManagerDelegate. * ui/ui_resources has been renamed to ui/resources * WebPreferences and ResourceType have moved inside content. * Merge ResourceBundle's InitSharedInstanceLocaleOnly with InitSharedInstanceWithLocale(): https://codereview.chromium.org/457103003 * Remove obsolete accessibility events. * AX_EVENT_SELECTED_TEXT_CHANGED has been renamed to AX_EVENT_TEXT_SELECTION_CHANGED * AX_ROLE_MATH_ELEMENT was removed upstream. https://codereview.chromium.org/695133002 * Screen::IsDIPEnabled has been removed upstream. https://codereview.chromium.org/672823002 * Update DevToolsHttpHandlerDelegateQt according to ShellDevToolsManagerDelegate. * Various functionality from DevToolsHttpHandler was moved to DevToolsManagerDelegate https://codereview.chromium.org/560323005 * DevToolsHttpHandler::Start expects a scoped_ptr now. * Make sure event_factory_evdev.h is not included when USE_OZONE is not defined * ErrorPageParams was moved into namespace error_page. * Media Access is now handled by ContentBrowserClient::CheckMediaAccessPermission * SpecialStoragePolicy moved to namespace storage * Add implementation for new pure virtual function BrowserContext::GetSSLHostStateDelegate. * RenderPass::Id was renamed to RenderPass::RenderPassId * Include view_messages.h for ViewHostMsg_TextInputState_Param * CERT_UNABLE_TO_CHECK_REVOCATION has been deprecated by Chromium: https://codereview.chromium.org/449743002 * MailboxManager::ConsumeTexture only takes the mailbox as an argument * Replace RWHVQt::TextInputStateChanged with RWHVQt::TextInputTypeChanged. * RenderWidgetHostView::ScrollOffsetChanged has been removed. * SkBitmap::Config was removed upstream. * CopyFromCompositingSurfaceCallback has become an own type. * AcceleratedSurfaceInitialized only takes route_id as an argument. * ServerBoundCertService has been renamed to ChannelIDService. Related API has been renamed accordingly. * TextureImageTransportSurface was removed upstream. * Update MediaCaptureDispatcher::OnMediaRequestStateChanged signature. * AudioStream related functions are gone upstream. https://codereview.chromium.org/569713002 * Add implementation for RenderWidgetHostViewQt::GetLastScrollOffset. * Include generic touch_device implementation. * switches::kDisableDesktopNotifications was removed upstream. https://codereview.chromium.org/607843002 * PageTransition moved to ui. * Messages headers are not guarded. Including them multiple times does hurt. * ScaleGestureDetector does not create a standalone GestureDetector anymore. https://codereview.chromium.org/501503003 * MotionEvent::Cancel and Clone are not virtual anymore. https://codereview.chromium.org/502993004 * Exclude os_exchange_data_provider_mac from build. * Remove argument from ScopedClipboardWriter ctor. https://codereview.chromium.org/558913003 * Remove ShowPopupMenu override from WebContentsQt. The function is not pure virtual anymore, and we never implemented any specifics. * Do not use clang on desktop linux. * Request functions in ContentBrowserClient were merged into RequestPermission. * ninja: use configure.py --bootstrap instead of bootstrap.py Change-Id: I3575612826db7845461a949b4e737264bb4e8d88 Reviewed-by: Pierre Rossi <pierre.rossi@theqtcompany.com>
* Merge remote-tracking branch 'origin/5.4' into devFrederik Gladhorn2015-01-021-2/+2
|\ | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/3rdparty src/core/content_browser_client_qt.h src/core/core_module.pro Change-Id: Ia05a6564a4d17ca14ff9b76ae018c3f4ef33d535
| * Check for EGL_KHR_fence_sync instead of EGL_KHR_reusable_syncAndras Becsi2014-12-081-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | We create an EGL_KHR_fence_sync on the chromium thread but try to verify if the wait function implementation is available by testing for the EGL_KHR_reusable_sync extension in the scene graph thread. Since the latter extension is not supported by most of our devices, we never actually waited for the rendering to finish. Change-Id: Ied829d4035d42899cfb3f86de018bc48e61c0cc0 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* | Don't use Q_FOREACH on QHash::valuesJocelyn Turcotte2014-11-251-5/+10
| | | | | | | | | | | | | | | | | | QHash::values will copy all values into a new QList, increasing the ref-count of all stored QSharedPointer temporarily. Use the QHash iterators directly to avoid this. Change-Id: I49b1af24b706da195dc4df7206133f039198aad7 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* | Support TransferableResource::is_softwareJocelyn Turcotte2014-11-251-24/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When the GPU process fails to initialize, or when the --disable-gpu switch is provided, the delegating renderer will transfer resource mailboxes through shared memory pixel data instead of through shared texture IDs in the GPU process. Handle this by uploading the pixel data ourselves with createTextureFromImage, also allowing us to render tiles in the QtQuick 2D Renderer. Change-Id: I70ad7122cd0e52dd5ab435ae01e7f032b8e1194e Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | Extract the resource logic out of MailboxTextureJocelyn Turcotte2014-11-251-66/+85
| | | | | | | | | | | | | | | | | | | | | | | | | | As a first step to allow using plain textures for software resources, split the Chromium resource handling responsibility into a ResourceHolder class. This also moves the static findMailboxTexture into a member DelegatedFrameNode::findAndHoldResource in preparation for how texture refcounting will work in the following patch. Change-Id: Iaa64273c187af022045bbcaa956fcaa1f3defabc Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | Avoid relying on QOpenGL classes to handle RenderPassesJocelyn Turcotte2014-11-251-107/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use QSGLayer and get rid of RenderPassTexture so that we can render intermediate layers with the QtQuick 2D Renderer. This reintroduces the private dependency on QtQuick since the QSGLayer factory methods aren't available publically, and also that we need to use QSGImageNode instead of QSGSimpleTextureNode to use them. Since we can't subclass QSGLayer to hold a reference to SG objects directly in the nodes that use them, store them all in the wrapping DelegatedFrameNode in a SGObjects structs. This works assuming that the DelegatedFrameNode will always be at the root of our nodes, layers and textures; if the scene graph destroys the DelegatedFrameNode all child nodes will be destroyed with it. Change-Id: Iedeceb8f98eb54fd8228a677c366d6df9a270e11 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | Don't rely on quads to set the texture sizeJocelyn Turcotte2014-11-251-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | What really matters with texture coordinates is the normalized 0-1 coordinate that will end up on vertex attributes. By default QSGSimpleTextureNode will use the full texture size to calculate those coordinates. In that case any texture size will end up with the same (0,0)-(1,1) coordinates, so we don't really need to set the actual texel size of the texture. So instead of relying on dependent quads to come back and set the size on the texture, do like the Chromium compositor does and just make sure that the full normalized texture rect is set on vertices if no texture size was provided on the resource. Since the scene graph doesn't achieve this behavior by default with an empty texture size, set a 1x1 size to get it to do what we want. Change-Id: I48751d2c2f6ea82dcb4bec9e984b64f7e77316f6 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | Use the new QSGSimpleTextureNode::sourceRectJocelyn Turcotte2014-11-251-4/+1
| | | | | | | | | | | | | | This is cleaner than hacking the QSGGeometry data ourselves. Change-Id: Id2009ac8c6237472e56a11d6daa589e94bf10945 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | Rename DelegatedFrameNodeData to ChromiumCompositorDataJocelyn Turcotte2014-11-251-13/+13
| | | | | | | | | | | | | | | | | | | | | | | | This clarifies that those objects span to the lifetime of a Chromium frame rather than to the DelegatedFrameNode, which can be destroyed by the scene graph when the window is unmapped. The also avoids the confusion with the DelegatedFrameData Chromium structure name. Change-Id: Ibbeb2b10ef18704fc0934e285cca4ead23879646 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | Add support for DebugBorderDrawQuadPierre Rossi2014-10-131-0/+25
|/ | | | | | | | This can be useful for debugging in conjunction with the --show-composited-layer-borders command line switch. Change-Id: Iade97f935c26e11f74552f7018770b968a31daf1 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Add Desktop OpenGL backend for WindowsKai Koehne2014-09-251-4/+21
| | | | | | | | Enabling rendering into a WGL backbuffer, in addition to the EGL/angle one. Change-Id: I8f2e3f5ecf52b6db22712b1129059f462725a256 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Wait on sync point fences instead of creating a new fenceJocelyn Turcotte2014-09-011-24/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | Posting a runnable on the GPU thread's message loop and creating a GL fence sync there assumes that there is a current GL context, and that synchronizing with this context will make sure that we wait for all GL context producing any of our consumed texture mailboxes. This is however not always the case like when: - The current GL context on the GPU thread is destroyed right before our runnable is handled, displaying errors on the console that glFlush needs a current context. - The GL driver will do extra scheduling and let the scene graph thread synchronize its GL command stream only with the GL context in which the fence sync was created. To remedy the situation, make sure that Chromium creates a fence sync for every sync points associated with a mailbox that we consume and do so directly in the GL context associated with the originating glInsertSyncPointCHROMIUM call. Wait for all those syncs on the Qt side afterward. This might also help with a few erratic behaviors noticed on some embedded GL drivers. Change-Id: I5fc60fcf51497477b2e1b3a535d0a141954fc6e5 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Update License Headers for Qt WebEngine to LGPLv3.Zeno Albisser2014-08-211-15/+10
| | | | | | | Change-Id: Idbe0eafb51d77cc00e3a93179b81770724d5bfaa Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Tuukka Turunen <tuukka.turunen@digia.com> Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Update the QtWebEngineCore library to run on top of Chromium 37Jocelyn Turcotte2014-08-141-3/+3
| | | | | | | | | | | | | | | Most of the patch is about upstream classes/methods that changed. Other important details: - icu data files are now used by default - cygwin is no longer required to build on Windows - RenderFrameHost has been replacing RenderViewHost in a few places, following the separate process iframes support in Chromium - The user agent is accessed through ContentClient::GetUserAgent instead of from the command line switches Change-Id: I86cc93aff7ce31176a80b0b4a5d54025674a451c Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Remove duplicate code for egl extensions and native display queryingAndras Becsi2014-08-061-10/+2
| | | | | | | This is now possible through GLSurfaceQt, and GLContextHelper respectively. Change-Id: I06e13ccdea9737dc41b034befb4f01aa08d72c2a Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Use QSGEngine instead of the private QSGRenderContextJocelyn Turcotte2014-08-061-28/+14
| | | | | | | | | QSGEngine was added in Qt 5.4 to allow using the scene graph without QQuickWindow. Use it for our FBO as well as for the QOpenGLWidget rendering. Change-Id: If4665d4f33c9dad69d2d4269309163bb5ffbd8e3 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Don't use the private QQuickDefaultClipNode and QSGRectangleNodeJocelyn Turcotte2014-08-011-8/+21
| | | | | | | | Use QSGSimpleRectNode and a custom QSGClipNode instead, which provide the same funtionalities without using private API. Change-Id: Ia62ddc9cf86240dbf85f69c088599b7ca8792e7c Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Project quads to z=0 instead of compressing them between 0 and 1Jocelyn Turcotte2014-06-171-30/+6
| | | | | | | | | | | | | Since all quads are already separated in non-intersecting geometries and ordered according to their depth by Chromium, there is no need to keep any z value once the perspective projection has been applied. Avoid the useless computation and project the quads to z=0 the same way that QMatrix4x4::toTransform() does when used to flatten QQuickItem::transform(). Change-Id: I3ec5dc2da23cf431e2d8d0bb8b1ed48f2f2d2d8e Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Support EGLStream video streaming on QNX platformMansoor Chishtie2014-06-021-1/+25
| | | | | | | | | | | | | | | | | | On QNX platform, we implement video streaming via OpenGL EGLStream streams. Changes were added to StreamVideo class to support EGLStream objects. For non-QNX platforms, we kept the StreamVideoNode class unchanged - assuming other platforms will continue to support streaming via EGLImage objects. On QNX, cc::StreamVideoDrawQuad contains an external OES texture that is associated with an EGLStream. Before we draw with that texture, an 'acquire' is performed to grab latest video frame. See EGL_KHR_stream specs from Khronos. Change-Id: Ia3fe25e9047f475594a55591e3e11caa0eab1e6a Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Fix a crash preventing us from using ImplSidePaintingJocelyn Turcotte2014-05-161-11/+18
| | | | | | | | | | | | | | Because of an uninvestigated reason, ImplSidePainting can cause more than one quad to use the same resource_id in one delegated frame. Fix the issue by first checking if m_data->mailboxTextures contains a texture for the resource_id before overwriting it. This also re-enables the feature on OS_ANDROID where it is enabled by default. Change-Id: Ie7842f958e1c049db71ffc2a0a768a5725102a3d Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Check properly for EGL extensions before using themLaszlo Agocs2014-05-121-7/+20
| | | | | | | | | | | Always check both EGL_EXTENSIONS and the validity of the returned function pointers. Otherwise bad things happen on EGL implementations that do not have the extension. Fix also linking to EGL. CONFIG+=egl has to be in core_module.pro too. Change-Id: I5e3dc54675d83123fc79e2d27a7af19fcc7f936a Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Fix the leak of resources imported more than onceJocelyn Turcotte2014-04-151-13/+26
| | | | | | | | | | | | | | | | | | | | | | | A compositor owns the resources it produces through its ResourceProvider. A refcount for each resource is kept according to how many times it is exported to parent compositors. If the same resource is sent more than once to the parent, the resource needs to be returned as often in CompositorFrameAck messages to make sure that it gets cleaned up. Since we would overwrite any previous MailboxTexture with a new one when receiving a TransferableResource, this would break the refcount of the child compositor and keep the resource alive. This would cause http://ie.microsoft.com/testdrive/performance/penguinmark/ to continuously allocate new textures in the GPU thread. Fix the issue by counting how many times the resource was imported, as ResourceProvider does itself, and populate ReturnedResource::count according to that value. Change-Id: I3a1f8da41338b5d431592f92fca8ef865ee2415c Reviewed-by: Arvid Nilsson <anilsson@blackberry.com> Reviewed-by: Michael Bruning <michael.bruning@digia.com>
* Buildfix for WindowsZoltan Arvai2014-04-111-0/+2
| | | | | | | | You cannot jump past a declaration with an initializer unless the declaration is enclosed in a block. See MSDN compiler error C2360. Change-Id: I692b0f256decf70b6153703ff59f74596cfc2861 Reviewed-by: Michael Bruning <michael.bruning@digia.com>
* Use a fence sync to synchronize GL between threadsJocelyn Turcotte2014-04-101-3/+53
| | | | | | | | | | | | | | | | | The NVidia driver needs more than a glFlush to ensure that GL commands consuming Chromium resources are run only when the resource is completely produced by the Chromium GPU thread. This produces artifacts and an uneven frame rate in WebGL examples on this kind of hardware. Use the same mechanism as used by gfx::GLFence, doing a few things manually to cope with the fact that Chromium and Qt both have their own GL function table and contexts. Change-Id: I33eeb1068994dc4176038a74579ce768b2bccb9d Reviewed-by: Andras Becsi <andras.becsi@digia.com> Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* Render the widgets view using the scene graph into a QOpenGLWidgetJocelyn Turcotte2014-04-081-11/+6
| | | | | | | | | | | | | | | This means that widgets application now need to setup the GL context sharing as well. QWebEngineWidgets::initialize() must be called, which has the same effect as QWebEngine::initialize(). The QtWebEngineWidgets now depends on the QtWebEngine module to make this happen. Since QOpenGLWidget is only available in Qt 5.3, this patch also disables the webenginewidgets module completely when building using Qt 5.2. Change-Id: I0e99a779d1eb080f2ccf5a338ff0763ad64e6eba Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix the HighDPI rendering of QQuickWebEngineViewJocelyn Turcotte2014-03-201-1/+8
| | | | | | | | | | | | | Use the ratio given with the compositor frame instead of taking it directly from the QWindow to make sure that we scale according to the rasterizing of the tiles. Set the scale directly on the DelegatedFrameNode by making it a QSGTransformNode to avoid creating an extra QSGNode. Change-Id: I95bd33c7c6d26e0d456d6df188779dc4e82f9d3b Reviewed-by: Arvid Nilsson <anilsson@blackberry.com> Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Handle CheckerboardDrawQuads in DelegatedFrameNodeAndras Becsi2014-02-261-1/+12
| | | | | Change-Id: I66541842650af4a2cc50cd0443eacde510df566f Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Video texture streaming support via external EGLImage texturesMansoor Chishtie2014-02-251-2/+24
| | | | | | | | | | | | Created new StreamVideoNode & StreamVideoMaterial classes for QSG renderer. These classes duplicate the logic of chromium's direct renderer GLRenderer::DrawStreamVideoQuad. Added support for new DrawQuad material in DelegatedFrameNode. Added support for external textures in MailboxTexture. Change-Id: If569b07dfef985f9833de7e64eeb3f952026bca4 Reviewed-by: Arvid Nilsson <anilsson@blackberry.com> Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Make Qt 5.2 a minimum requirementPierre Rossi2014-02-141-2/+0
| | | | | | | | Cleanup version ifdefs and v8-private dependencies. Change-Id: Iac393c06dfba02499e60d713d9f4d04ef0c9e617 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Quick: Support reparentingArvid Nilsson2014-01-311-11/+18
| | | | | | | | | | | | | | | | | To support reparenting, we make the compositing surface independent of the window by using gfx::TEXTURE_TRANSPORT. We also need to be able to keep frame data across window changes so we can reconstruct the QSGNode tree in a new context, so extract that data into DelegatedFrameNodeData class. Any context-specific data is still stored in DelegatedFrameNode. Also hook up window changes to WebContents::WasShown/Hidden for Quick. Remove checking of Qt isVisible state, this mechanism is used to sync Chromium with Qt, not the other way around. WasShown/Hidden is orthogonal to Show/Hide, and can use different triggers. However for Widgets it probably makes sense to hook both up to widget visibility. Change-Id: I1ef4b50cd61b8e54b791e03f0b41929c42fec8bf Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Moving sources to src part 1: Move files.Jocelyn Turcotte2013-11-281-0/+519
This only move files without adjusting any paths. This moves: - lib/quick -> src/webengine/api (API files) lib/quick -> src/webengine (other files) This contains the main QtWebEngine module library since <ec7b2ee70a8b2db7fb87f50671a001ddd54697b0>. - lib/widgets -> src/webenginewidgets Also rename this directory to match its module name and rename Api to api. - lib -> src/core - process -> src/process - resources -> src/core/resources - tools/* -> tools/scripts/ The build directory is spread as follow: - build/build.pro -> src/core/gyp_run.pro - build/qmake_extras/* -> src/core/ (for the host and target .pro files) - build/qmake -> tools/qmake - Build related scripts -> tools/buildscripts Change-Id: I0cded1de772c99c0c1da6536c9afea353236b4a1 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com> Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com> Reviewed-by: Andras Becsi <andras.becsi@digia.com>