Index: gpu/command_buffer/service/gpu_scheduler.h |
=================================================================== |
--- gpu/command_buffer/service/gpu_scheduler.h (revision 93137) |
+++ gpu/command_buffer/service/gpu_scheduler.h (working copy) |
@@ -43,15 +43,20 @@ |
// posts tasks to the current message loop to do additional work. |
class GpuScheduler : public CommandBufferEngine { |
public: |
+ // Scheduler quantum: makes ProcessCommands continue until the specified time |
+ // has passed, or the command buffer yields or runs out of commands. |
+ static const int kMinimumSchedulerQuantumMicros = 2000; |
+ |
// If a group is not passed in one will be created. |
- static GpuScheduler* Create(CommandBuffer* command_buffer, |
- SurfaceManager* surface_manager, |
- gles2::ContextGroup* group); |
+ GpuScheduler(CommandBuffer* command_buffer, |
+ SurfaceManager* surface_manager, |
+ gles2::ContextGroup* group); |
// This constructor is for unit tests. |
- static GpuScheduler* CreateForTests(CommandBuffer* command_buffer, |
- gles2::GLES2Decoder* decoder, |
- CommandParser* parser); |
+ GpuScheduler(CommandBuffer* command_buffer, |
+ gles2::GLES2Decoder* decoder, |
+ CommandParser* parser, |
+ int commands_per_update); |
virtual ~GpuScheduler(); |
@@ -68,7 +73,7 @@ |
bool SetParent(GpuScheduler* parent_scheduler, uint32 parent_texture_id); |
- void PutChanged(); |
+ void PutChanged(bool sync); |
// Sets whether commands should be processed by this scheduler. Setting to |
// false unschedules. Setting to true reschedules. Whether or not the |
@@ -146,6 +151,13 @@ |
void SetCommandProcessedCallback(Callback0::Type* callback); |
+ // Sets a callback which is called after a Set/WaitLatch command is processed. |
+ // The bool parameter will be true for SetLatch, and false for a WaitLatch |
+ // that is blocked. An unblocked WaitLatch will not trigger a callback. |
+ void SetLatchCallback(const base::Callback<void(bool)>& callback) { |
+ decoder_->SetLatchCallback(callback); |
+ } |
+ |
// Sets a callback which is called when set_token() is called, and passes the |
// just-set token to the callback. DCHECKs that no callback has previously |
// been registered for this notification. |
@@ -166,10 +178,8 @@ |
private: |
- // If a group is not passed in one will be created. |
- GpuScheduler(CommandBuffer* command_buffer, |
- gles2::GLES2Decoder* decoder, |
- CommandParser* parser); |
+ // Helper which causes a call to ProcessCommands to be scheduled later. |
+ void ScheduleProcessCommands(); |
// Called via a callback just before we are supposed to call the |
// user's resize callback. |
@@ -178,12 +188,15 @@ |
// Called via a callback just before we are supposed to call the |
// user's swap buffers callback. |
void WillSwapBuffers(); |
+ void ProcessCommands(); |
// The GpuScheduler holds a weak reference to the CommandBuffer. The |
// CommandBuffer owns the GpuScheduler and holds a strong reference to it |
// through the ProcessCommands callback. |
CommandBuffer* command_buffer_; |
+ int commands_per_update_; |
+ |
scoped_ptr<gles2::GLES2Decoder> decoder_; |
scoped_ptr<CommandParser> parser_; |