#include "cc/surfaces/surface_factory.h"
#include "cc/output/compositor_frame.h"
+#include "cc/output/copy_output_request.h"
#include "cc/surfaces/surface.h"
#include "cc/surfaces/surface_manager.h"
#include "ui/gfx/geometry/size.h"
}
SurfaceFactory::~SurfaceFactory() {
- DCHECK_EQ(0u, surface_map_.size());
}
void SurfaceFactory::Create(SurfaceId surface_id, const gfx::Size& size) {
}
void SurfaceFactory::SubmitFrame(SurfaceId surface_id,
- scoped_ptr<CompositorFrame> frame) {
+ scoped_ptr<CompositorFrame> frame,
+ const base::Closure& callback) {
OwningSurfaceMap::iterator it = surface_map_.find(surface_id);
DCHECK(it != surface_map_.end());
DCHECK(it->second->factory() == this);
- it->second->QueueFrame(frame.Pass());
+ it->second->QueueFrame(frame.Pass(), callback);
+ manager_->SurfaceModified(surface_id);
+}
+
+void SurfaceFactory::RequestCopyOfSurface(
+ SurfaceId surface_id,
+ scoped_ptr<CopyOutputRequest> copy_request) {
+ OwningSurfaceMap::iterator it = surface_map_.find(surface_id);
+ if (it == surface_map_.end()) {
+ copy_request->SendEmptyResult();
+ return;
+ }
+ DCHECK(it->second->factory() == this);
+ it->second->RequestCopyOfOutput(copy_request.Pass());
+ manager_->SurfaceModified(surface_id);
}
void SurfaceFactory::ReceiveFromChild(