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();