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

Side by Side Diff: content/browser/renderer_host/compositor_impl_android.cc

Issue 2061273002: cc: Make BackToBackBeginFrameSource a SyntheticBeginFrameSource. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: syntheticbeginframesource: no-more-bfs-base Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/compositor_impl_android.h" 5 #include "content/browser/renderer_host/compositor_impl_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 #include <android/native_window_jni.h> 8 #include <android/native_window_jni.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 namespace gpu { 74 namespace gpu {
75 struct GpuProcessHostedCALayerTreeParamsMac; 75 struct GpuProcessHostedCALayerTreeParamsMac;
76 } 76 }
77 77
78 namespace content { 78 namespace content {
79 79
80 namespace { 80 namespace {
81 81
82 const unsigned int kMaxDisplaySwapBuffers = 1U; 82 const unsigned int kMaxDisplaySwapBuffers = 1U;
83 83
84 class ExternalBeginFrameSource : public cc::BeginFrameSourceBase, 84 class ExternalBeginFrameSource : public cc::BeginFrameSource,
85 public CompositorImpl::VSyncObserver { 85 public CompositorImpl::VSyncObserver {
86 public: 86 public:
87 ExternalBeginFrameSource(CompositorImpl* compositor) 87 explicit ExternalBeginFrameSource(CompositorImpl* compositor)
88 : compositor_(compositor) { 88 : compositor_(compositor) {
89 compositor_->AddObserver(this); 89 compositor_->AddObserver(this);
90 } 90 }
91
92 ~ExternalBeginFrameSource() override { compositor_->RemoveObserver(this); } 91 ~ExternalBeginFrameSource() override { compositor_->RemoveObserver(this); }
93 92
94 // cc::BeginFrameSourceBase implementation: 93 // cc::BeginFrameSource implementation.
95 void AddObserver(cc::BeginFrameObserver* obs) override { 94 void AddObserver(cc::BeginFrameObserver* obs) override;
96 cc::BeginFrameSourceBase::AddObserver(obs); 95 void RemoveObserver(cc::BeginFrameObserver* obs) override;
97 DCHECK(needs_begin_frames()); 96 void DidFinishFrame(cc::BeginFrameObserver* obs,
98 if (!last_begin_frame_args_.IsValid()) 97 size_t remaining_frames) override {}
99 return;
100 98
99 // CompositorImpl::VSyncObserver implementation.
100 void OnVSync(base::TimeTicks frame_time,
101 base::TimeDelta vsync_period) override;
102
103 private:
104 CompositorImpl* const compositor_;
105 std::set<cc::BeginFrameObserver*> observers_;
106 cc::BeginFrameArgs last_begin_frame_args_;
107 };
108
109 void ExternalBeginFrameSource::AddObserver(cc::BeginFrameObserver* obs) {
110 DCHECK(obs);
111 DCHECK(observers_.find(obs) == observers_.end());
112
113 DEBUG_FRAMES("ExternalBeginFrameSource::AddObserver", "num observers",
114 observers_.size(), "to add observer", obs);
115 observers_.insert(obs);
116 obs->OnBeginFrameSourcePausedChanged(false);
117 compositor_->OnNeedsBeginFramesChange(true);
118
119 if (last_begin_frame_args_.IsValid()) {
101 // Send a MISSED begin frame if necessary. 120 // Send a MISSED begin frame if necessary.
102 cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); 121 cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs();
103 if (!last_args.IsValid() || 122 if (!last_args.IsValid() ||
104 (last_begin_frame_args_.frame_time > last_args.frame_time)) { 123 (last_begin_frame_args_.frame_time > last_args.frame_time)) {
105 last_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; 124 last_begin_frame_args_.type = cc::BeginFrameArgs::MISSED;
106 // TODO(crbug.com/602485): A deadline doesn't make too much sense 125 // TODO(crbug.com/602485): A deadline doesn't make too much sense
107 // for a missed BeginFrame (the intention rather is 'immediately'), 126 // for a missed BeginFrame (the intention rather is 'immediately'),
108 // but currently the retro frame logic is very strict in discarding 127 // but currently the retro frame logic is very strict in discarding
109 // BeginFrames. 128 // BeginFrames.
110 last_begin_frame_args_.deadline = 129 last_begin_frame_args_.deadline =
111 base::TimeTicks::Now() + last_begin_frame_args_.interval; 130 base::TimeTicks::Now() + last_begin_frame_args_.interval;
112 obs->OnBeginFrame(last_begin_frame_args_); 131 obs->OnBeginFrame(last_begin_frame_args_);
113 } 132 }
114 } 133 }
134 }
115 135
116 void OnNeedsBeginFramesChanged(bool needs_begin_frames) override { 136 void ExternalBeginFrameSource::RemoveObserver(cc::BeginFrameObserver* obs) {
117 TRACE_EVENT1("compositor", "OnNeedsBeginFramesChanged", 137 DCHECK(obs);
118 "needs_begin_frames", needs_begin_frames); 138 DCHECK(observers_.find(obs) != observers_.end());
119 compositor_->OnNeedsBeginFramesChange(needs_begin_frames);
120 }
121 139
122 // CompositorImpl::VSyncObserver implementation: 140 DEBUG_FRAMES("ExternalBeginFrameSource::RemoveObserver", "num observers",
123 void OnVSync(base::TimeTicks frame_time, 141 observers_.size(), "removed observer", obs);
124 base::TimeDelta vsync_period) override { 142 observers_.erase(obs);
125 base::TimeTicks deadline = std::max(base::TimeTicks::Now(), frame_time); 143 if (observers_.empty())
126 last_begin_frame_args_ = 144 compositor_->OnNeedsBeginFramesChange(false);
127 cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, 145 }
128 vsync_period, cc::BeginFrameArgs::NORMAL);
129 CallOnBeginFrame(last_begin_frame_args_);
130 }
131 146
132 private: 147 void ExternalBeginFrameSource::OnVSync(base::TimeTicks frame_time,
133 CompositorImpl* compositor_; 148 base::TimeDelta vsync_period) {
134 cc::BeginFrameArgs last_begin_frame_args_; 149 base::TimeTicks deadline = std::max(base::TimeTicks::Now(), frame_time);
135 }; 150 last_begin_frame_args_ =
151 cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline,
152 vsync_period, cc::BeginFrameArgs::NORMAL);
153 std::set<cc::BeginFrameObserver*> observers(observers_);
154 for (auto* obs : observers)
155 obs->OnBeginFrame(last_begin_frame_args_);
156 }
136 157
137 // Used to override capabilities_.adjust_deadline_for_parent to false 158 // Used to override capabilities_.adjust_deadline_for_parent to false
138 class OutputSurfaceWithoutParent : public cc::OutputSurface, 159 class OutputSurfaceWithoutParent : public cc::OutputSurface,
139 public CompositorImpl::VSyncObserver { 160 public CompositorImpl::VSyncObserver {
140 public: 161 public:
141 OutputSurfaceWithoutParent( 162 OutputSurfaceWithoutParent(
142 CompositorImpl* compositor, 163 CompositorImpl* compositor,
143 scoped_refptr<ContextProviderCommandBuffer> context_provider, 164 scoped_refptr<ContextProviderCommandBuffer> context_provider,
144 const base::Callback<void(gpu::Capabilities)>& 165 const base::Callback<void(gpu::Capabilities)>&
145 populate_gpu_capabilities_callback, 166 populate_gpu_capabilities_callback,
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 void CompositorImpl::SetNeedsAnimate() { 820 void CompositorImpl::SetNeedsAnimate() {
800 needs_animate_ = true; 821 needs_animate_ = true;
801 if (!host_->visible()) 822 if (!host_->visible())
802 return; 823 return;
803 824
804 TRACE_EVENT0("compositor", "Compositor::SetNeedsAnimate"); 825 TRACE_EVENT0("compositor", "Compositor::SetNeedsAnimate");
805 host_->SetNeedsAnimate(); 826 host_->SetNeedsAnimate();
806 } 827 }
807 828
808 } // namespace content 829 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698