Chromium Code Reviews| Index: cc/surfaces/surface.cc |
| diff --git a/cc/surfaces/surface.cc b/cc/surfaces/surface.cc |
| index 32e61c5ed778a1b49da97aaa18fb5bf955b9625b..35e1e481e87809a62e3076f5003633a244fb1411 100644 |
| --- a/cc/surfaces/surface.cc |
| +++ b/cc/surfaces/surface.cc |
| @@ -9,10 +9,28 @@ |
| #include "cc/output/compositor_frame.h" |
| #include "cc/output/copy_output_request.h" |
| #include "cc/surfaces/surface_factory.h" |
| +#include "cc/surfaces/surface_id_allocator.h" |
| #include "cc/surfaces/surface_manager.h" |
| namespace cc { |
| +namespace { |
| +struct SatisfyChecker { |
| + SatisfyChecker(base::hash_set<SurfaceSequence>* satisfied) |
|
jamesr
2014/11/06 01:16:17
explicit
|
| + : satisfied_(satisfied) {} |
| + |
| + bool operator()(const SurfaceSequence& seq) { |
| + auto it = satisfied_->find(seq); |
| + if (it != satisfied_->end()) { |
| + satisfied_->erase(it); |
| + return true; |
| + } |
| + return false; |
| + } |
| + base::hash_set<SurfaceSequence>* satisfied_; |
| +}; |
| +} // namespace |
| + |
| // The frame index starts at 2 so that empty frames will be treated as |
| // completely damaged the first time they're drawn from. |
| static const int kFrameIndexStart = 2; |
| @@ -57,7 +75,8 @@ void Surface::QueueFrame(scoped_ptr<CompositorFrame> frame, |
| draw_callback_.Run(); |
| draw_callback_ = callback; |
| factory_->manager()->DidSatisfySequences( |
| - surface_id_, ¤t_frame_->metadata.satisfies_sequences); |
| + SurfaceIdAllocator::NamespaceForId(surface_id_), |
| + ¤t_frame_->metadata.satisfies_sequences); |
| } |
| void Surface::RequestCopyOfOutput(scoped_ptr<CopyOutputRequest> copy_request) { |
| @@ -111,6 +130,19 @@ void Surface::RunDrawCallbacks() { |
| } |
| } |
| +void Surface::AddDestructionDependency(SurfaceSequence sequence) { |
| + destruction_dependencies_.push_back(sequence); |
| +} |
| + |
| +void Surface::SatisfyDestructionDependencies( |
| + base::hash_set<SurfaceSequence>* sequences) { |
| + destruction_dependencies_.erase( |
| + std::remove_if(destruction_dependencies_.begin(), |
| + destruction_dependencies_.end(), |
| + SatisfyChecker(sequences)), |
|
jamesr
2014/11/06 01:16:17
i think this would be a good use case for a lambda
|
| + destruction_dependencies_.end()); |
| +} |
| + |
| void Surface::ClearCopyRequests() { |
| if (current_frame_) { |
| for (const auto& render_pass : |