Index: gpu/ipc/service/gpu_command_buffer_stub.h |
diff --git a/gpu/ipc/service/gpu_command_buffer_stub.h b/gpu/ipc/service/gpu_command_buffer_stub.h |
index 91b8dfe1c36ff3978808b7af5933d2ee276e8c31..08357e2f6806a515c33bb6fb70893652b77f0537 100644 |
--- a/gpu/ipc/service/gpu_command_buffer_stub.h |
+++ b/gpu/ipc/service/gpu_command_buffer_stub.h |
@@ -16,6 +16,7 @@ |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
#include "base/observer_list.h" |
+#include "base/synchronization/lock.h" |
#include "base/time/time.h" |
#include "gpu/command_buffer/common/command_buffer_id.h" |
#include "gpu/command_buffer/common/constants.h" |
@@ -50,6 +51,7 @@ namespace gpu { |
class GpuChannel; |
struct WaitForCommandState; |
+class GpuVSyncProvider; |
class GPU_EXPORT GpuCommandBufferStub |
: public IPC::Listener, |
@@ -93,9 +95,18 @@ class GPU_EXPORT GpuCommandBufferStub |
void DidSwapBuffersComplete(SwapBuffersCompleteParams params) override; |
const gles2::FeatureInfo* GetFeatureInfo() const override; |
void SetLatencyInfoCallback(const LatencyInfoCallback& callback) override; |
+ // This is called from VSyncProvider to update parameters for generating |
+ // timer-based VSync signals on the browser side. |
void UpdateVSyncParameters(base::TimeTicks timebase, |
base::TimeDelta interval) override; |
+ // This is called from GpuVSyncProvider with actual GPU VSync signals. |
+ void UpdateGpuVSync(base::TimeTicks timestamp); |
+ |
+ // Send VSync signals or VSync parameters over IPC. |
+ void SendUpdatedVSyncParameters(base::TimeTicks timebase, |
+ base::TimeDelta interval); |
+ |
gles2::MemoryTracker* GetMemoryTracker() const; |
// Whether this command buffer can currently handle IPC messages. |
@@ -188,6 +199,7 @@ class GPU_EXPORT GpuCommandBufferStub |
void OnCreateStreamTexture(uint32_t texture_id, |
int32_t stream_id, |
bool* succeeded); |
+ void OnEnableVSync(bool enabled); |
void OnCommandProcessed(); |
void OnParseError(); |
@@ -250,6 +262,21 @@ class GPU_EXPORT GpuCommandBufferStub |
std::unique_ptr<WaitForCommandState> wait_for_token_; |
std::unique_ptr<WaitForCommandState> wait_for_get_offset_; |
+ bool gpu_vsync_signal_supported_; |
+ std::unique_ptr<GpuVSyncProvider> vsync_provider_; |
+ |
+#if defined(OS_WIN) |
+ // TODO: This isn't ideal, but for now VSync interval is still |
+ // provided via UpdateVSyncParameters on the main thread, but |
+ // it needs to be passed along with VSync signal when VSync becomes |
+ // available on background thread. |
+ // The current solution is to temporarily store vsync_interval_. |
+ // Perhaps this could be avoided by calculating the interval from |
+ // consecutive VSync signals. |
+ base::TimeDelta vsync_interval_; |
+ base::Lock vsync_lock_; |
+#endif // defined(OS_WIN) |
+ |
DISALLOW_COPY_AND_ASSIGN(GpuCommandBufferStub); |
}; |