Reland of Getting rid of CompositorFrameMetadata::satisfies_sequences (patchset #1 id:1 of https://codereview.chromium.org/2585543003/ )

Reason for revert:
Relanding this. The real culprit was https://codereview.chromium.org/2578893003/.

Original issue's description:
> Revert of Getting rid of CompositorFrameMetadata::satisfies_sequences (patchset #17 id:380001 of https://codereview.chromium.org/2537943002/ )
>
> Reason for revert:
> Suspected cause of ChromiumOS compile failure.
> https://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Builder%20%28dbg%29/builds/81640
>
> Original issue's description:
> > Getting rid of CompositorFrameMetadata::satisfies_sequences
> >
> > This CL helps unify the way we destroy references to surfaces.
> > We currently have two code paths for satisfying a surface sequence.
> > One is through calling the satisfy callback which is given to the
> > reference holder, and the other one is through populating
> > satisfies_sequences in CompositorFrameMetadata and letting
> > Surface::QueueFrame do the rest of the work. Eventually they both do
> > the same thing: they call SurfaceManager::DidSatisfySequences. This CL
> > gets rid of satisfies_sequences in CompositorFrameMetadata and from now
> > on the only way for satisfying a sequence is through the callback. This
> > is a necessary change because we are phasing out SurfaceSequence and
> > exposing it in CompositorFrameMetadata is not a good idea.
> >
> > BUG=659598
> > CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel
> >
> > Committed: https://crrev.com/d0de6cf72a25d789a507d6eb904a8f1ae314d00b
> > Cr-Commit-Position: refs/heads/master@{#439043}
>
> [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=659598
>
> Committed: https://crrev.com/f0983129357f6a46b29756ed183115b8dc8e371e
> Cr-Commit-Position: refs/heads/master@{#439051}

[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=659598

Review-Url: https://codereview.chromium.org/2583803002
Cr-Commit-Position: refs/heads/master@{#439064}
diff --git a/cc/layers/surface_layer.cc b/cc/layers/surface_layer.cc
index 3ff9e67..d3b25ac 100644
--- a/cc/layers/surface_layer.cc
+++ b/cc/layers/surface_layer.cc
@@ -7,6 +7,7 @@
 #include <stdint.h>
 
 #include "base/macros.h"
+#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/layers/surface_layer_impl.h"
 #include "cc/output/swap_promise.h"
@@ -18,27 +19,36 @@
 
 class SatisfySwapPromise : public SwapPromise {
  public:
-  SatisfySwapPromise(SurfaceSequence sequence,
-                     const SurfaceLayer::SatisfyCallback& satisfy_callback)
-      : sequence_(sequence), satisfy_callback_(satisfy_callback) {}
+  SatisfySwapPromise(
+      const SurfaceSequence& sequence,
+      const SurfaceLayer::SatisfyCallback& satisfy_callback,
+      scoped_refptr<base::SingleThreadTaskRunner> main_task_runner)
+      : sequence_(sequence),
+        satisfy_callback_(satisfy_callback),
+        main_task_runner_(std::move(main_task_runner)) {}
 
   ~SatisfySwapPromise() override {}
 
  private:
   void DidActivate() override {}
-  void WillSwap(CompositorFrameMetadata* metadata) override {
-    metadata->satisfies_sequences.push_back(sequence_.sequence);
+  void WillSwap(CompositorFrameMetadata* metadata) override {}
+  void DidSwap() override {
+    // DidSwap could run on compositor thread but satisfy callback must
+    // run on the main thread.
+    main_task_runner_->PostTask(FROM_HERE,
+                                base::Bind(satisfy_callback_, sequence_));
   }
-  void DidSwap() override {}
 
   DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
-    satisfy_callback_.Run(sequence_);
+    main_task_runner_->PostTask(FROM_HERE,
+                                base::Bind(satisfy_callback_, sequence_));
     return DidNotSwapAction::BREAK_PROMISE;
   }
   int64_t TraceId() const override { return 0; }
 
   SurfaceSequence sequence_;
   SurfaceLayer::SatisfyCallback satisfy_callback_;
+  scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
 
   DISALLOW_COPY_AND_ASSIGN(SatisfySwapPromise);
 };
@@ -120,8 +130,9 @@
   if (!layer_tree_host())
     return;
   DCHECK(destroy_sequence_.is_valid());
-  std::unique_ptr<SatisfySwapPromise> satisfy(
-      new SatisfySwapPromise(destroy_sequence_, satisfy_callback_));
+  auto satisfy =
+      base::MakeUnique<SatisfySwapPromise>(destroy_sequence_, satisfy_callback_,
+                                           base::ThreadTaskRunnerHandle::Get());
   layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
       std::move(satisfy));
   destroy_sequence_ = SurfaceSequence();