Commit d18a8508 authored by Kenneth Russell's avatar Kenneth Russell Committed by Commit Bot

Fix query and sync objects on workers.

Introduce a helper WebGLRenderingContextBase::GetContextTaskRunner()
and use it uniformly when posting tasks related to query objects, sync
objects, and timer query objects.

Tested with WebGL conformance tests being added in
https://github.com/KhronosGroup/WebGL/pull/3004 .

Bug: 1010877
Change-Id: I36128dca93fc7ff490abf503991b82992d9861d6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1999486Reviewed-by: default avatarJames Darpinian <jdarpinian@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#731795}
parent 497e175a
......@@ -16,14 +16,8 @@ WebGLQuery::WebGLQuery(WebGL2RenderingContextBase* ctx)
target_(0),
can_update_availability_(false),
query_result_available_(false),
query_result_(0) {
if (ctx->canvas()) {
task_runner_ =
ctx->canvas()->GetDocument().GetTaskRunner(TaskType::kInternalDefault);
} else {
// Fallback for OffscreenCanvas (no frame scheduler)
task_runner_ = Thread::Current()->GetTaskRunner();
}
query_result_(0),
task_runner_(ctx->GetContextTaskRunner()) {
GLuint query;
ctx->ContextGL()->GenQueriesEXT(1, &query);
SetObject(query);
......
......@@ -1378,6 +1378,11 @@ void WebGLRenderingContextBase::MarkContextChanged(
}
}
scoped_refptr<base::SingleThreadTaskRunner>
WebGLRenderingContextBase::GetContextTaskRunner() {
return task_runner_;
}
void WebGLRenderingContextBase::DidDraw(const SkIRect& dirty_rect) {
MarkContextChanged(kCanvasChanged);
CanvasRenderingContext::DidDraw(dirty_rect);
......
......@@ -612,32 +612,39 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext,
void UpdateNumberOfUserAllocatedMultisampledRenderbuffers(int delta);
protected:
// WebGL object types.
friend class WebGLContextObject;
friend class WebGLObject;
friend class WebGLQuery;
friend class WebGLTimerQueryEXT;
friend class WebGLVertexArrayObjectBase;
// Implementation helpers.
friend class ScopedDrawingBufferBinder;
friend class ScopedFramebufferRestorer;
friend class ScopedTexture2DRestorer;
friend class ScopedUnpackParametersResetRestore;
friend class WebGLRenderingContextErrorMessageCallback;
// WebGL extensions.
friend class EXTDisjointTimerQuery;
friend class EXTDisjointTimerQueryWebGL2;
friend class WebGLDrawBuffers;
friend class WebGLFramebuffer;
friend class WebGLObject;
friend class WebGLContextObject;
friend class OESVertexArrayObject;
friend class OVRMultiview2;
friend class WebGLDebugShaders;
friend class WebGLCompressedTextureASTC;
friend class WebGLCompressedTextureETC;
friend class WebGLCompressedTextureETC1;
friend class WebGLCompressedTexturePVRTC;
friend class WebGLCompressedTextureS3TC;
friend class WebGLCompressedTextureS3TCsRGB;
friend class WebGLDebugShaders;
friend class WebGLDrawBuffers;
friend class WebGLDrawInstancedBaseVertexBaseInstance;
friend class WebGLFramebuffer;
friend class WebGLMultiDraw;
friend class WebGLMultiDrawCommon;
friend class WebGLDrawInstancedBaseVertexBaseInstance;
friend class WebGLMultiDrawInstancedBaseVertexBaseInstance;
friend class WebGLRenderingContextErrorMessageCallback;
friend class WebGLVertexArrayObjectBase;
friend class WebGLVideoTexture;
friend class ScopedDrawingBufferBinder;
friend class ScopedTexture2DRestorer;
friend class ScopedFramebufferRestorer;
friend class ScopedUnpackParametersResetRestore;
WebGLRenderingContextBase(CanvasRenderingContextHost*,
std::unique_ptr<WebGraphicsContext3DProvider>,
......@@ -683,6 +690,8 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext,
void OnErrorMessage(const char*, int32_t id);
scoped_refptr<base::SingleThreadTaskRunner> GetContextTaskRunner();
// Query if depth_stencil buffer is supported.
bool IsDepthStencilSupported() { return is_depth_stencil_supported_; }
......
......@@ -17,14 +17,8 @@ WebGLSync::WebGLSync(WebGL2RenderingContextBase* ctx,
: WebGLSharedObject(ctx),
sync_status_(GL_UNSIGNALED),
object_(object),
object_type_(object_type) {
if (ctx->canvas()) {
task_runner_ =
ctx->canvas()->GetDocument().GetTaskRunner(TaskType::kInternalDefault);
} else {
// Fallback for OffscreenCanvas (no frame scheduler)
task_runner_ = Thread::Current()->GetTaskRunner();
}
object_type_(object_type),
task_runner_(ctx->GetContextTaskRunner()) {
ScheduleAllowCacheUpdate();
}
......
......@@ -18,8 +18,7 @@ WebGLTimerQueryEXT::WebGLTimerQueryEXT(WebGLRenderingContextBase* ctx)
can_update_availability_(false),
query_result_available_(false),
query_result_(0),
task_runner_(ctx->canvas()->GetDocument().GetTaskRunner(
TaskType::kInternalDefault)) {
task_runner_(ctx->GetContextTaskRunner()) {
Context()->ContextGL()->GenQueriesEXT(1, &query_id_);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment