Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(832)

Unified Diff: content/browser/renderer_host/compositor_impl_android.cc

Issue 1821863002: Hook up ui::Compositor to Display's BeginFrameSource (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Really revert task runner changes Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/compositor_impl_android.cc
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index 56b9201dcc5b70abac801a1e398ffac1b25a33d9..6c262ead06c282cc8149033f4d6bbbebbd1afc5d 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -74,6 +74,35 @@ namespace {
const unsigned int kMaxDisplaySwapBuffers = 1U;
+class ExternalBeginFrameSource : public cc::BeginFrameSourceBase,
+ public CompositorImpl::VSyncObserver {
+ public:
+ ExternalBeginFrameSource(CompositorImpl* compositor)
+ : compositor_(compositor) {
+ compositor_->AddObserver(this);
+ }
+
+ ~ExternalBeginFrameSource() override {
+ compositor_->RemoveObserver(this);
+ }
+
+ // cc::BeginFrameSourceBase implementation:
+ void OnNeedsBeginFramesChanged(bool needs_begin_frames) override {
+ compositor_->OnNeedsBeginFramesChange(needs_begin_frames);
+ }
+
+ // CompositorImpl::VSyncObserver implementation:
+ void OnVSync(base::TimeTicks frame_time,
+ base::TimeDelta vsync_period) override {
+ CallOnBeginFrame(cc::BeginFrameArgs::Create(
+ BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks::Now(), vsync_period,
+ cc::BeginFrameArgs::NORMAL));
+ }
+
+ private:
+ CompositorImpl* compositor_;
+};
+
// Used to override capabilities_.adjust_deadline_for_parent to false
class OutputSurfaceWithoutParent : public cc::OutputSurface,
public CompositorImpl::VSyncObserver {
@@ -82,7 +111,8 @@ class OutputSurfaceWithoutParent : public cc::OutputSurface,
CompositorImpl* compositor,
const scoped_refptr<ContextProviderCommandBuffer>& context_provider,
const base::Callback<void(gpu::Capabilities)>&
- populate_gpu_capabilities_callback)
+ populate_gpu_capabilities_callback,
+ scoped_ptr<ExternalBeginFrameSource> begin_frame_source)
: cc::OutputSurface(context_provider),
compositor_(compositor),
populate_gpu_capabilities_callback_(populate_gpu_capabilities_callback),
@@ -90,7 +120,8 @@ class OutputSurfaceWithoutParent : public cc::OutputSurface,
base::Bind(&OutputSurfaceWithoutParent::OnSwapBuffersCompleted,
base::Unretained(this))),
overlay_candidate_validator_(
- new BrowserCompositorOverlayCandidateValidatorAndroid()) {
+ new BrowserCompositorOverlayCandidateValidatorAndroid()),
+ begin_frame_source_(std::move(begin_frame_source)) {
capabilities_.adjust_deadline_for_parent = false;
capabilities_.max_frames_pending = kMaxDisplaySwapBuffers;
}
@@ -120,9 +151,16 @@ class OutputSurfaceWithoutParent : public cc::OutputSurface,
context_provider_->ContextCapabilities().gpu);
compositor_->AddObserver(this);
+ client->SetBeginFrameSource(begin_frame_source_.get());
+
return true;
}
+ void DetachFromClient() override {
+ client_->SetBeginFrameSource(nullptr);
+ OutputSurface::DetachFromClient();
+ }
+
cc::OverlayCandidateValidator* GetOverlayCandidateValidator() const override {
return overlay_candidate_validator_.get();
}
@@ -145,44 +183,17 @@ class OutputSurfaceWithoutParent : public cc::OutputSurface,
}
void OnVSync(base::TimeTicks timebase, base::TimeDelta interval) override {
- CommitVSyncParameters(timebase, interval);
+ client_->CommitVSyncParameters(timebase, interval);
}
+ private:
CompositorImpl* compositor_;
base::Callback<void(gpu::Capabilities)> populate_gpu_capabilities_callback_;
base::CancelableCallback<void(const std::vector<ui::LatencyInfo>&,
gfx::SwapResult)>
swap_buffers_completion_callback_;
scoped_ptr<cc::OverlayCandidateValidator> overlay_candidate_validator_;
-};
-
-class ExternalBeginFrameSource : public cc::BeginFrameSourceBase,
- public CompositorImpl::VSyncObserver {
- public:
- ExternalBeginFrameSource(CompositorImpl* compositor)
- : compositor_(compositor) {
- compositor_->AddObserver(this);
- }
-
- ~ExternalBeginFrameSource() override {
- compositor_->RemoveObserver(this);
- }
-
- // cc::BeginFrameSourceBase implementation:
- void OnNeedsBeginFramesChanged(bool needs_begin_frames) override {
- compositor_->OnNeedsBeginFramesChange(needs_begin_frames);
- }
-
- // CompositorImpl::VSyncObserver implementation:
- void OnVSync(base::TimeTicks frame_time,
- base::TimeDelta vsync_period) override {
- CallOnBeginFrame(cc::BeginFrameArgs::Create(
- BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks::Now(), vsync_period,
- cc::BeginFrameArgs::NORMAL));
- }
-
- private:
- CompositorImpl* compositor_;
+ scoped_ptr<ExternalBeginFrameSource> begin_frame_source_;
};
static bool g_initialized = false;
@@ -333,7 +344,6 @@ void CompositorImpl::CreateLayerTreeHost() {
settings.renderer_settings.allow_antialiasing = false;
settings.renderer_settings.highp_threshold_min = 2048;
settings.use_zero_copy = true;
- settings.use_external_begin_frame_source = true;
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
settings.initial_debug_state.SetRecordRenderingStats(
@@ -349,7 +359,6 @@ void CompositorImpl::CreateLayerTreeHost() {
params.task_graph_runner = g_task_graph_runner.Pointer();
params.main_task_runner = base::ThreadTaskRunnerHandle::Get();
params.settings = &settings;
- params.external_begin_frame_source.reset(new ExternalBeginFrameSource(this));
host_ = cc::LayerTreeHost::CreateSingleThreaded(this, &params);
DCHECK(!host_->visible());
host_->SetRootLayer(root_layer_);
@@ -551,7 +560,8 @@ void CompositorImpl::CreateOutputSurface() {
new OutputSurfaceWithoutParent(
this, context_provider,
base::Bind(&CompositorImpl::PopulateGpuCapabilities,
- base::Unretained(this))));
+ base::Unretained(this)),
+ make_scoped_ptr(new ExternalBeginFrameSource(this))));
cc::SurfaceManager* manager = GetSurfaceManager();
display_client_.reset(
@@ -559,7 +569,8 @@ void CompositorImpl::CreateOutputSurface() {
HostSharedBitmapManager::current(),
BrowserGpuMemoryBufferManager::current(),
host_->settings().renderer_settings,
- base::ThreadTaskRunnerHandle::Get()));
+ base::ThreadTaskRunnerHandle::Get().get(),
+ surface_id_allocator_->id_namespace()));
scoped_ptr<cc::SurfaceDisplayOutputSurface> surface_output_surface(
new cc::SurfaceDisplayOutputSurface(
manager, surface_id_allocator_.get(), context_provider, nullptr));

Powered by Google App Engine
This is Rietveld 408576698