Index: content/browser/compositor/buffer_queue.cc |
diff --git a/content/browser/compositor/buffer_queue.cc b/content/browser/compositor/buffer_queue.cc |
index ebb01658ccba55c0a1401e9fba4b3e4b22d41bb0..b91be5361c45c0d08bb258bd7955841c4e03a3da 100644 |
--- a/content/browser/compositor/buffer_queue.cc |
+++ b/content/browser/compositor/buffer_queue.cc |
@@ -70,8 +70,8 @@ void BufferQueue::CopyBufferDamage(int texture, |
} |
void BufferQueue::UpdateBufferDamage(const gfx::Rect& damage) { |
- for (size_t i = 0; i < available_surfaces_.size(); i++) |
- available_surfaces_[i].damage.Union(damage); |
achaulk
2014/12/05 20:12:20
This would have to stay to handle rare cases
|
+ for (size_t i = 0; i < display_queue_surfaces_.size(); i++) |
+ display_queue_surfaces_[i].damage.Union(damage); |
for (std::deque<AllocatedSurface>::iterator it = |
in_flight_surfaces_.begin(); |
it != in_flight_surfaces_.end(); |
@@ -111,8 +111,16 @@ void BufferQueue::Reshape(const gfx::Size& size, float scale_factor) { |
} |
void BufferQueue::PageFlipComplete() { |
+ // The surface is already displayed on screen and is available for use. |
+ if (display_queue_surfaces_.size() > 0) { |
+ available_surfaces_.push_back(display_queue_surfaces_.front()); |
+ display_queue_surfaces_.pop_front(); |
achaulk
2014/12/05 20:12:19
I'm not sure what the point of this extra list (of
|
+ } |
+ |
+ // We have requested page flip for the surface and it's waiting to be |
+ // displayed. Let's not put it back to free list yet. |
if (in_flight_surfaces_.size() > 1) { |
- available_surfaces_.push_back(in_flight_surfaces_.front()); |
+ display_queue_surfaces_.push_back(in_flight_surfaces_.front()); |
in_flight_surfaces_.pop_front(); |
} |
} |
@@ -123,6 +131,10 @@ void BufferQueue::FreeAllSurfaces() { |
FreeSurface(&in_flight_surfaces_.front()); |
in_flight_surfaces_.pop_front(); |
} |
+ while (!display_queue_surfaces_.empty()) { |
+ FreeSurface(&display_queue_surfaces_.front()); |
+ display_queue_surfaces_.pop_front(); |
+ } |
for (size_t i = 0; i < available_surfaces_.size(); i++) |
FreeSurface(&available_surfaces_[i]); |
available_surfaces_.clear(); |