Index: content/browser/compositor/buffer_queue.cc |
diff --git a/content/browser/compositor/buffer_queue.cc b/content/browser/compositor/buffer_queue.cc |
index 689288f6d63b75d10c0b329fb32205d234ee1140..b6f4815c34851bcb802e03fd9661f281136710c1 100644 |
--- a/content/browser/compositor/buffer_queue.cc |
+++ b/content/browser/compositor/buffer_queue.cc |
@@ -120,6 +120,26 @@ void BufferQueue::Reshape(const gfx::Size& size, float scale_factor) { |
FreeAllSurfaces(); |
} |
+void BufferQueue::RecreateBuffers() { |
+ AllocatedSurface previous = in_flight_surfaces_.back(); |
+ in_flight_surfaces_.pop_back(); |
+ FreeAllSurfaces(); |
+ FreeSurface(¤t_surface_); |
+ |
+ AllocatedSurface first_buffer = GetNextSurface(); |
+ CopyBufferDamage(first_buffer.texture, previous.texture, gfx::Rect(), |
+ gfx::Rect(size_)); |
+ in_flight_surfaces_.push_back(first_buffer); |
+ |
+ AllocatedSurface second_buffer = GetNextSurface(); |
+ CopyBufferDamage(second_buffer.texture, previous.texture, gfx::Rect(), |
+ gfx::Rect(size_)); |
+ available_surfaces_.push_back(second_buffer); |
+ |
+ BindFramebuffer(); |
+ FreeSurface(&previous); |
+} |
+ |
void BufferQueue::PageFlipComplete() { |
if (in_flight_surfaces_.size() > 1) { |
available_surfaces_.push_back(in_flight_surfaces_.front()); |