Commit d216f65c authored by Geoff Lang's avatar Geoff Lang Committed by Commit Bot

Use Async swap functions when possible in the passthrough cmd decoder.

Recent versions of Android use GLSurfaceEGLSurfaceControl which only implements
the Async swaps.

BUG=979342

Change-Id: I0bc624de5d3ddbbdce09b614a927a11a9cb73213
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1686785
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: default avatarKenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#675767}
parent 9ba7862c
...@@ -2587,6 +2587,19 @@ bool GLES2DecoderPassthroughImpl::IsEmulatedFramebufferBound( ...@@ -2587,6 +2587,19 @@ bool GLES2DecoderPassthroughImpl::IsEmulatedFramebufferBound(
return false; return false;
} }
void GLES2DecoderPassthroughImpl::CheckSwapBuffersAsyncResult(
const char* function_name,
uint64_t swap_id,
gfx::SwapResult result,
std::unique_ptr<gfx::GpuFence> gpu_fence) {
TRACE_EVENT_ASYNC_END0("gpu", "AsyncSwapBuffers", swap_id);
// Handling of the out-fence should have already happened before reaching
// this function, so we don't expect to get a valid fence here.
DCHECK(!gpu_fence);
CheckSwapBuffersResult(result, function_name);
}
error::Error GLES2DecoderPassthroughImpl::CheckSwapBuffersResult( error::Error GLES2DecoderPassthroughImpl::CheckSwapBuffersResult(
gfx::SwapResult result, gfx::SwapResult result,
const char* function_name) { const char* function_name) {
......
...@@ -465,6 +465,10 @@ class GPU_GLES2_EXPORT GLES2DecoderPassthroughImpl : public GLES2Decoder { ...@@ -465,6 +465,10 @@ class GPU_GLES2_EXPORT GLES2DecoderPassthroughImpl : public GLES2Decoder {
void ExitCommandProcessingEarly() override; void ExitCommandProcessingEarly() override;
void CheckSwapBuffersAsyncResult(const char* function_name,
uint64_t swap_id,
gfx::SwapResult result,
std::unique_ptr<gfx::GpuFence> gpu_fence);
error::Error CheckSwapBuffersResult(gfx::SwapResult result, error::Error CheckSwapBuffersResult(gfx::SwapResult result,
const char* function_name); const char* function_name);
......
...@@ -3604,8 +3604,18 @@ error::Error GLES2DecoderPassthroughImpl::DoSwapBuffers(uint64_t swap_id, ...@@ -3604,8 +3604,18 @@ error::Error GLES2DecoderPassthroughImpl::DoSwapBuffers(uint64_t swap_id,
} }
client()->OnSwapBuffers(swap_id, flags); client()->OnSwapBuffers(swap_id, flags);
return CheckSwapBuffersResult(surface_->SwapBuffers(base::DoNothing()), if (surface_->SupportsAsyncSwap()) {
"SwapBuffers"); TRACE_EVENT_ASYNC_BEGIN0("gpu", "AsyncSwapBuffers", swap_id);
surface_->SwapBuffersAsync(
base::BindOnce(
&GLES2DecoderPassthroughImpl::CheckSwapBuffersAsyncResult,
weak_ptr_factory_.GetWeakPtr(), "SwapBuffers", swap_id),
base::DoNothing());
return error::kNoError;
} else {
return CheckSwapBuffersResult(surface_->SwapBuffers(base::DoNothing()),
"SwapBuffers");
}
} }
error::Error GLES2DecoderPassthroughImpl::DoGetMaxValueInBufferCHROMIUM( error::Error GLES2DecoderPassthroughImpl::DoGetMaxValueInBufferCHROMIUM(
...@@ -4208,9 +4218,20 @@ error::Error GLES2DecoderPassthroughImpl::DoPostSubBufferCHROMIUM( ...@@ -4208,9 +4218,20 @@ error::Error GLES2DecoderPassthroughImpl::DoPostSubBufferCHROMIUM(
} }
client()->OnSwapBuffers(swap_id, flags); client()->OnSwapBuffers(swap_id, flags);
return CheckSwapBuffersResult( if (surface_->SupportsAsyncSwap()) {
surface_->PostSubBuffer(x, y, width, height, base::DoNothing()), TRACE_EVENT_ASYNC_BEGIN0("gpu", "AsyncSwapBuffers", swap_id);
"PostSubBuffer"); surface_->PostSubBufferAsync(
x, y, width, height,
base::BindOnce(
&GLES2DecoderPassthroughImpl::CheckSwapBuffersAsyncResult,
weak_ptr_factory_.GetWeakPtr(), "PostSubBuffer", swap_id),
base::DoNothing());
return error::kNoError;
} else {
return CheckSwapBuffersResult(
surface_->PostSubBuffer(x, y, width, height, base::DoNothing()),
"PostSubBuffer");
}
} }
error::Error GLES2DecoderPassthroughImpl::DoCopyTextureCHROMIUM( error::Error GLES2DecoderPassthroughImpl::DoCopyTextureCHROMIUM(
...@@ -4617,8 +4638,19 @@ error::Error GLES2DecoderPassthroughImpl::DoCommitOverlayPlanesCHROMIUM( ...@@ -4617,8 +4638,19 @@ error::Error GLES2DecoderPassthroughImpl::DoCommitOverlayPlanesCHROMIUM(
} }
client()->OnSwapBuffers(swap_id, flags); client()->OnSwapBuffers(swap_id, flags);
return CheckSwapBuffersResult( if (surface_->SupportsAsyncSwap()) {
surface_->CommitOverlayPlanes(base::DoNothing()), "CommitOverlayPlanes"); TRACE_EVENT_ASYNC_BEGIN0("gpu", "AsyncSwapBuffers", swap_id);
surface_->CommitOverlayPlanesAsync(
base::BindOnce(
&GLES2DecoderPassthroughImpl::CheckSwapBuffersAsyncResult,
weak_ptr_factory_.GetWeakPtr(), "CommitOverlayPlanes", swap_id),
base::DoNothing());
return error::kNoError;
} else {
return CheckSwapBuffersResult(
surface_->CommitOverlayPlanes(base::DoNothing()),
"CommitOverlayPlanes");
}
} }
error::Error GLES2DecoderPassthroughImpl::DoSetColorSpaceMetadataCHROMIUM( error::Error GLES2DecoderPassthroughImpl::DoSetColorSpaceMetadataCHROMIUM(
......
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