Index: ui/compositor/compositor.cc |
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
index 1b6f342aade256f319beba3178b41f7f781062bb..d33a012db4523f9307d410ce0839d6f63dbc19f9 100644 |
--- a/ui/compositor/compositor.cc |
+++ b/ui/compositor/compositor.cc |
@@ -20,6 +20,7 @@ |
#include "cc/layers/layer.h" |
#include "cc/output/begin_frame_args.h" |
#include "cc/output/context_provider.h" |
+#include "cc/surfaces/surface_id_allocator.h" |
#include "cc/trees/layer_tree_host.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "ui/compositor/compositor_observer.h" |
@@ -68,12 +69,31 @@ namespace {} // namespace |
namespace ui { |
+class SatisfySwapPromise : public cc::SwapPromise { |
+ public: |
+ explicit SatisfySwapPromise(uint32_t id) : id_(id) {} |
+ |
+ private: |
+ virtual void DidSwap(cc::CompositorFrameMetadata* metadata) OVERRIDE { |
+ metadata->satisfies_sequences.push_back(id_); |
+ } |
+ |
+ virtual void DidNotSwap(DidNotSwapReason reason) OVERRIDE { |
+ // TODO(jbauman): Send to the SurfaceManager immediately. |
+ DCHECK(false); |
+ } |
+ virtual int64 TraceId() const OVERRIDE { return 0; } |
+ uint32_t id_; |
+}; |
+ |
Compositor::Compositor(gfx::AcceleratedWidget widget, |
ui::ContextFactory* context_factory, |
scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
: context_factory_(context_factory), |
root_layer_(NULL), |
widget_(widget), |
+ surface_id_allocator_(context_factory->CreateSurfaceIdAllocator()), |
+ surface_sequence_number_(0), |
compositor_thread_loop_(context_factory->GetCompositorMessageLoop()), |
task_runner_(task_runner), |
vsync_manager_(new CompositorVSyncManager()), |
@@ -406,6 +426,16 @@ void Compositor::SetLayerTreeDebugState( |
host_->SetDebugState(debug_state); |
} |
+cc::SurfaceSequence Compositor::CreateSurfaceSequenceForNextFrame() { |
danakj
2014/10/09 17:47:38
Create -> Insert ?
|
+ cc::SurfaceSequence sequence; |
+ sequence.id_namespace = surface_id_allocator_->id_namespace(); |
+ sequence.sequence = ++surface_sequence_number_; |
+ scoped_ptr<cc::SwapPromise> promise( |
+ new SatisfySwapPromise(surface_sequence_number_)); |
+ host_->QueueSwapPromise(promise.Pass()); |
+ return sequence; |
+} |
+ |
scoped_refptr<CompositorLock> Compositor::GetCompositorLock() { |
if (!compositor_lock_) { |
compositor_lock_ = new CompositorLock(this); |