Mus: Fix Capabilities and Install SwapBuffersCompleted/VSync callbacks
DirectOutputSurface(Ozone) should be informed when a swap buffers is
completed or when vsync parameters are updated so that it can update the
compositor accordingly. We need to make sure that the callback is called on the Mus
compositor thread. InProcessCommandBuffer calls
these callbacks on the "origin" thread in this patch.
Furthermore, InProcessContextProvider was faking Capabilities instead of grabbing
them from InProcessContextProvider. This doesn't work on
ozone platforms.
BUG=668136
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Review-Url: https://codereview.chromium.org/2529703002
Cr-Commit-Position: refs/heads/master@{#434285}
diff --git a/gpu/ipc/in_process_command_buffer.cc b/gpu/ipc/in_process_command_buffer.cc
index 9e2a5ca..dd1fb71 100644
--- a/gpu/ipc/in_process_command_buffer.cc
+++ b/gpu/ipc/in_process_command_buffer.cc
@@ -1082,6 +1082,39 @@
void InProcessCommandBuffer::DidSwapBuffersComplete(
SwapBuffersCompleteParams params) {
+ if (!origin_task_runner_) {
+ DidSwapBuffersCompleteOnOriginThread(std::move(params));
+ return;
+ }
+ origin_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&InProcessCommandBuffer::DidSwapBuffersCompleteOnOriginThread,
+ client_thread_weak_ptr_, base::Passed(¶ms)));
+}
+
+const gles2::FeatureInfo* InProcessCommandBuffer::GetFeatureInfo() const {
+ return context_group_->feature_info();
+}
+
+void InProcessCommandBuffer::SetLatencyInfoCallback(
+ const LatencyInfoCallback& callback) {
+ // TODO(fsamuel): Implement this.
+}
+
+void InProcessCommandBuffer::UpdateVSyncParameters(base::TimeTicks timebase,
+ base::TimeDelta interval) {
+ if (!origin_task_runner_) {
+ UpdateVSyncParametersOnOriginThread(timebase, interval);
+ return;
+ }
+ origin_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&InProcessCommandBuffer::UpdateVSyncParametersOnOriginThread,
+ client_thread_weak_ptr_, timebase, interval));
+}
+
+void InProcessCommandBuffer::DidSwapBuffersCompleteOnOriginThread(
+ SwapBuffersCompleteParams params) {
#if defined(OS_MACOSX)
gpu::GpuProcessHostedCALayerTreeParamsMac params_mac;
params_mac.ca_context_id = params.ca_context_id;
@@ -1110,17 +1143,9 @@
}
}
-const gles2::FeatureInfo* InProcessCommandBuffer::GetFeatureInfo() const {
- return context_group_->feature_info();
-}
-
-void InProcessCommandBuffer::SetLatencyInfoCallback(
- const LatencyInfoCallback& callback) {
- // TODO(fsamuel): Implement this.
-}
-
-void InProcessCommandBuffer::UpdateVSyncParameters(base::TimeTicks timebase,
- base::TimeDelta interval) {
+void InProcessCommandBuffer::UpdateVSyncParametersOnOriginThread(
+ base::TimeTicks timebase,
+ base::TimeDelta interval) {
if (!update_vsync_parameters_completion_callback_.is_null())
update_vsync_parameters_completion_callback_.Run(timebase, interval);
}