summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-08 13:41:41 +0000
committerbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-08 13:41:41 +0000
commitdc3c97ec7e333e87ec32c11f40f3a8cbbdc4efaf (patch)
tree8d60d85bd01c830eacd327d17f93004b28e62ec2 /gpu
parent10d3c4d936e49ac43cac59b1a855899d7c2968a9 (diff)
downloadchromium_src-dc3c97ec7e333e87ec32c11f40f3a8cbbdc4efaf.zip
chromium_src-dc3c97ec7e333e87ec32c11f40f3a8cbbdc4efaf.tar.gz
chromium_src-dc3c97ec7e333e87ec32c11f40f3a8cbbdc4efaf.tar.bz2
Plumbing: Cache the resize callback so that we can call it later.
I am working towards having two surfaces that the GpuScheduler alternates between on SwapBuffers. Each surface should be resized once it is the backbuffer (via SwapBuffers). By caching the resize callback, I can (a) resize of the backbuffer immediately when the callback is initiated from the GLES2Decoder and (b) resize the frontbuffer once it becomes the backbuffer after a SwapBuffers. BUG=none TEST=none (should be no-op on all platforms) Review URL: http://codereview.chromium.org/6982060 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88327 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/service/gpu_scheduler.cc11
-rw-r--r--gpu/command_buffer/service/gpu_scheduler.h5
2 files changed, 15 insertions, 1 deletions
diff --git a/gpu/command_buffer/service/gpu_scheduler.cc b/gpu/command_buffer/service/gpu_scheduler.cc
index 5fa9ceb..53fcfa2 100644
--- a/gpu/command_buffer/service/gpu_scheduler.cc
+++ b/gpu/command_buffer/service/gpu_scheduler.cc
@@ -276,7 +276,10 @@ void GpuScheduler::ResizeOffscreenFrameBuffer(const gfx::Size& size) {
}
void GpuScheduler::SetResizeCallback(Callback1<gfx::Size>::Type* callback) {
- decoder_->SetResizeCallback(callback);
+ wrapped_resize_callback_.reset(callback);
+ decoder_->SetResizeCallback(
+ NewCallback(this,
+ &GpuScheduler::WillResize));
}
void GpuScheduler::SetSwapBuffersCallback(
@@ -298,4 +301,10 @@ void GpuScheduler::ScheduleProcessCommands() {
method_factory_.NewRunnableMethod(&GpuScheduler::ProcessCommands));
}
+void GpuScheduler::WillResize(gfx::Size size) {
+ if (wrapped_resize_callback_.get()) {
+ wrapped_resize_callback_->Run(size);
+ }
+}
+
} // namespace gpu
diff --git a/gpu/command_buffer/service/gpu_scheduler.h b/gpu/command_buffer/service/gpu_scheduler.h
index b49713f..7f74734 100644
--- a/gpu/command_buffer/service/gpu_scheduler.h
+++ b/gpu/command_buffer/service/gpu_scheduler.h
@@ -160,6 +160,10 @@ class GpuScheduler : public CommandBufferEngine {
void ScheduleProcessCommands();
// Called via a callback just before we are supposed to call the
+ // user's resize callback.
+ void WillResize(gfx::Size size);
+
+ // Called via a callback just before we are supposed to call the
// user's swap buffers callback.
void WillSwapBuffers();
void ProcessCommands();
@@ -186,6 +190,7 @@ class GpuScheduler : public CommandBufferEngine {
#endif
ScopedRunnableMethodFactory<GpuScheduler> method_factory_;
+ scoped_ptr<Callback1<gfx::Size>::Type> wrapped_resize_callback_;
scoped_ptr<Callback0::Type> wrapped_swap_buffers_callback_;
scoped_ptr<Callback0::Type> command_processed_callback_;
};