Revved to chromium 2a04445358913b81ed786927172647b701b73113 refs/remotes/origin/HEAD
diff --git a/cc/surfaces/surface.cc b/cc/surfaces/surface.cc
index 4d32d72..07c5ae6 100644
--- a/cc/surfaces/surface.cc
+++ b/cc/surfaces/surface.cc
@@ -23,12 +23,7 @@
}
Surface::~Surface() {
- for (ScopedPtrVector<CopyOutputRequest>::iterator it = copy_requests_.begin();
- it != copy_requests_.end();
- ++it) {
- (*it)->SendEmptyResult();
- }
- copy_requests_.clear();
+ ClearCopyRequests();
if (current_frame_ && factory_) {
ReturnedResourceArray current_resources;
TransferableResource::ReturnResources(
@@ -41,13 +36,7 @@
void Surface::QueueFrame(scoped_ptr<CompositorFrame> frame,
const base::Closure& callback) {
DCHECK(factory_);
- for (ScopedPtrVector<CopyOutputRequest>::iterator it = copy_requests_.begin();
- it != copy_requests_.end();
- ++it) {
- (*it)->SendEmptyResult();
- }
- copy_requests_.clear();
-
+ ClearCopyRequests();
TakeLatencyInfo(&frame->metadata.latency_info);
scoped_ptr<CompositorFrame> previous_frame = current_frame_.Pass();
current_frame_ = frame.Pass();
@@ -70,13 +59,29 @@
}
void Surface::RequestCopyOfOutput(scoped_ptr<CopyOutputRequest> copy_request) {
- copy_requests_.push_back(copy_request.Pass());
+ if (current_frame_ &&
+ !current_frame_->delegated_frame_data->render_pass_list.empty())
+ current_frame_->delegated_frame_data->render_pass_list.back()
+ ->copy_requests.push_back(copy_request.Pass());
+ else
+ copy_request->SendEmptyResult();
}
void Surface::TakeCopyOutputRequests(
- ScopedPtrVector<CopyOutputRequest>* copy_requests) {
+ std::multimap<RenderPassId, CopyOutputRequest*>* copy_requests) {
DCHECK(copy_requests->empty());
- copy_requests->swap(copy_requests_);
+ if (current_frame_) {
+ for (auto* render_pass :
+ current_frame_->delegated_frame_data->render_pass_list) {
+ while (!render_pass->copy_requests.empty()) {
+ scoped_ptr<CopyOutputRequest> request =
+ render_pass->copy_requests.take_back();
+ render_pass->copy_requests.pop_back();
+ copy_requests->insert(
+ std::make_pair(render_pass->id, request.release()));
+ }
+ }
+ }
}
const CompositorFrame* Surface::GetEligibleFrame() {
@@ -104,4 +109,14 @@
}
}
+void Surface::ClearCopyRequests() {
+ if (current_frame_) {
+ for (auto* render_pass :
+ current_frame_->delegated_frame_data->render_pass_list) {
+ for (auto* copy_request : render_pass->copy_requests)
+ copy_request->SendEmptyResult();
+ }
+ }
+}
+
} // namespace cc