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

Side by Side Diff: content/browser/android/in_process/synchronous_compositor_impl.cc

Issue 619843002: cc: Make separate interface for BeginFrame ipc from OutputSurface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/android/in_process/synchronous_compositor_impl.h" 5 #include "content/browser/android/in_process/synchronous_compositor_impl.h"
6 6
7 #include "base/auto_reset.h"
7 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
8 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
9 #include "cc/input/input_handler.h" 10 #include "cc/input/input_handler.h"
11 #include "content/browser/android/in_process/synchronous_compositor_external_beg in_frame_source.h"
10 #include "content/browser/android/in_process/synchronous_compositor_factory_impl .h" 12 #include "content/browser/android/in_process/synchronous_compositor_factory_impl .h"
11 #include "content/browser/android/in_process/synchronous_input_event_filter.h" 13 #include "content/browser/android/in_process/synchronous_input_event_filter.h"
12 #include "content/browser/renderer_host/render_widget_host_view_android.h" 14 #include "content/browser/renderer_host/render_widget_host_view_android.h"
13 #include "content/common/input/did_overscroll_params.h" 15 #include "content/common/input/did_overscroll_params.h"
14 #include "content/public/browser/android/synchronous_compositor_client.h" 16 #include "content/public/browser/android/synchronous_compositor_client.h"
15 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
16 #include "content/public/browser/render_process_host.h" 18 #include "content/public/browser/render_process_host.h"
17 #include "content/public/browser/render_view_host.h" 19 #include "content/public/browser/render_view_host.h"
18 #include "ui/gl/gl_surface.h" 20 #include "ui/gl/gl_surface.h"
19 21
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 } 60 }
59 61
60 SynchronousCompositorImpl* SynchronousCompositorImpl::FromRoutingID( 62 SynchronousCompositorImpl* SynchronousCompositorImpl::FromRoutingID(
61 int routing_id) { 63 int routing_id) {
62 return FromID(GetInProcessRendererId(), routing_id); 64 return FromID(GetInProcessRendererId(), routing_id);
63 } 65 }
64 66
65 SynchronousCompositorImpl::SynchronousCompositorImpl(WebContents* contents) 67 SynchronousCompositorImpl::SynchronousCompositorImpl(WebContents* contents)
66 : compositor_client_(NULL), 68 : compositor_client_(NULL),
67 output_surface_(NULL), 69 output_surface_(NULL),
70 begin_frame_source_(NULL),
68 contents_(contents), 71 contents_(contents),
69 input_handler_(NULL), 72 input_handler_(NULL),
73 invoking_composite_(false),
70 weak_ptr_factory_(this) { 74 weak_ptr_factory_(this) {
71 DCHECK(contents); 75 DCHECK(contents);
72 } 76 }
73 77
74 SynchronousCompositorImpl::~SynchronousCompositorImpl() { 78 SynchronousCompositorImpl::~SynchronousCompositorImpl() {
75 if (compositor_client_) 79 if (compositor_client_)
76 compositor_client_->DidDestroyCompositor(this); 80 compositor_client_->DidDestroyCompositor(this);
77 SetInputHandler(NULL); 81 SetInputHandler(NULL);
78 } 82 }
79 83
80 void SynchronousCompositorImpl::SetClient( 84 void SynchronousCompositorImpl::SetClient(
81 SynchronousCompositorClient* compositor_client) { 85 SynchronousCompositorClient* compositor_client) {
82 DCHECK(CalledOnValidThread()); 86 DCHECK(CalledOnValidThread());
83 compositor_client_ = compositor_client; 87 compositor_client_ = compositor_client;
84 } 88 }
85 89
86 // static 90 // static
87 void SynchronousCompositor::SetGpuService( 91 void SynchronousCompositor::SetGpuService(
88 scoped_refptr<gpu::InProcessCommandBuffer::Service> service) { 92 scoped_refptr<gpu::InProcessCommandBuffer::Service> service) {
89 g_factory.Get().SetDeferredGpuService(service); 93 g_factory.Get().SetDeferredGpuService(service);
90 } 94 }
91 95
92 // static 96 // static
93 void SynchronousCompositor::SetRecordFullDocument(bool record_full_document) { 97 void SynchronousCompositor::SetRecordFullDocument(bool record_full_document) {
94 g_factory.Get().SetRecordFullDocument(record_full_document); 98 g_factory.Get().SetRecordFullDocument(record_full_document);
95 } 99 }
96 100
101 void SynchronousCompositorImpl::SetExternalBeginFrameSource(
102 SynchronousCompositorExternalBeginFrameSource* begin_frame_source) {
103 begin_frame_source_ = begin_frame_source;
boliu 2014/10/24 17:42:40 Need keep BeginFrameSource and compositor_client_
simonhong 2014/10/29 14:47:13 DCHECK(compositor_client_) is added. And, begin_fr
104 }
105
97 bool SynchronousCompositorImpl::InitializeHwDraw() { 106 bool SynchronousCompositorImpl::InitializeHwDraw() {
98 DCHECK(CalledOnValidThread()); 107 DCHECK(CalledOnValidThread());
99 DCHECK(output_surface_); 108 DCHECK(output_surface_);
100 109
101 scoped_refptr<cc::ContextProvider> onscreen_context = 110 scoped_refptr<cc::ContextProvider> onscreen_context =
102 g_factory.Get().CreateOnscreenContextProviderForCompositorThread(); 111 g_factory.Get().CreateOnscreenContextProviderForCompositorThread();
103 112
104 bool success = output_surface_->InitializeHwDraw(onscreen_context); 113 bool success = output_surface_->InitializeHwDraw(onscreen_context);
105 114
106 if (success) 115 if (success)
(...skipping 10 matching lines...) Expand all
117 126
118 scoped_ptr<cc::CompositorFrame> SynchronousCompositorImpl::DemandDrawHw( 127 scoped_ptr<cc::CompositorFrame> SynchronousCompositorImpl::DemandDrawHw(
119 gfx::Size surface_size, 128 gfx::Size surface_size,
120 const gfx::Transform& transform, 129 const gfx::Transform& transform,
121 gfx::Rect viewport, 130 gfx::Rect viewport,
122 gfx::Rect clip, 131 gfx::Rect clip,
123 gfx::Rect viewport_rect_for_tile_priority, 132 gfx::Rect viewport_rect_for_tile_priority,
124 const gfx::Transform& transform_for_tile_priority) { 133 const gfx::Transform& transform_for_tile_priority) {
125 DCHECK(CalledOnValidThread()); 134 DCHECK(CalledOnValidThread());
126 DCHECK(output_surface_); 135 DCHECK(output_surface_);
136 DCHECK(!invoking_composite_);
137 DCHECK(begin_frame_source_);
boliu 2014/10/24 17:42:40 This DCHECK is not guaranteed. Note we only call
simonhong 2014/10/29 14:47:13 Removed.
138 base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true);
127 139
128 scoped_ptr<cc::CompositorFrame> frame = 140 scoped_ptr<cc::CompositorFrame> frame =
129 output_surface_->DemandDrawHw(surface_size, 141 output_surface_->DemandDrawHw(surface_size,
130 transform, 142 transform,
131 viewport, 143 viewport,
132 clip, 144 clip,
133 viewport_rect_for_tile_priority, 145 viewport_rect_for_tile_priority,
134 transform_for_tile_priority); 146 transform_for_tile_priority);
135 if (frame.get()) 147 if (frame.get())
136 UpdateFrameMetaData(frame->metadata); 148 UpdateFrameMetaData(frame->metadata);
137 149
boliu 2014/10/24 17:42:40 Where is the BeginFrame and SetContinuousInvalidat
simonhong 2014/10/29 14:47:13 SetContinuousInvalidate() is added.
138 return frame.Pass(); 150 return frame.Pass();
139 } 151 }
140 152
153 void SynchronousCompositorImpl::RequestBeginFrame() {
boliu 2014/10/24 17:42:40 Super confusing name, should be just BeginFrame. B
simonhong 2014/10/29 14:47:13 This function is removed.
154 begin_frame_source_->BeginFrame();
boliu 2014/10/24 17:42:40 DCHECK(begin_frame_source_)
155 SetContinuousInvalidate(begin_frame_source_->NeedsBeginFrames());
boliu 2014/10/24 17:42:40 Why?
156 }
157
141 void SynchronousCompositorImpl::ReturnResources( 158 void SynchronousCompositorImpl::ReturnResources(
142 const cc::CompositorFrameAck& frame_ack) { 159 const cc::CompositorFrameAck& frame_ack) {
143 DCHECK(CalledOnValidThread()); 160 DCHECK(CalledOnValidThread());
144 output_surface_->ReturnResources(frame_ack); 161 output_surface_->ReturnResources(frame_ack);
145 } 162 }
146 163
147 bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) { 164 bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) {
148 DCHECK(CalledOnValidThread()); 165 DCHECK(CalledOnValidThread());
149 DCHECK(output_surface_); 166 DCHECK(output_surface_);
167 DCHECK(!invoking_composite_);
168 DCHECK(begin_frame_source_);
169 base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true);
150 170
151 scoped_ptr<cc::CompositorFrame> frame = output_surface_->DemandDrawSw(canvas); 171 scoped_ptr<cc::CompositorFrame> frame = output_surface_->DemandDrawSw(canvas);
152 if (frame.get()) 172 if (frame.get())
153 UpdateFrameMetaData(frame->metadata); 173 UpdateFrameMetaData(frame->metadata);
174
175 begin_frame_source_->BeginFrame();
boliu 2014/10/24 17:42:40 Why?
simonhong 2014/10/29 14:47:13 Removed.
176 SetContinuousInvalidate(begin_frame_source_->NeedsBeginFrames());
177
154 return !!frame.get(); 178 return !!frame.get();
155 } 179 }
156 180
157 void SynchronousCompositorImpl::UpdateFrameMetaData( 181 void SynchronousCompositorImpl::UpdateFrameMetaData(
158 const cc::CompositorFrameMetadata& frame_metadata) { 182 const cc::CompositorFrameMetadata& frame_metadata) {
159 RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>( 183 RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
160 contents_->GetRenderWidgetHostView()); 184 contents_->GetRenderWidgetHostView());
161 if (rwhv) 185 if (rwhv)
162 rwhv->SynchronousFrameMetadata(frame_metadata); 186 rwhv->SynchronousFrameMetadata(frame_metadata);
163 DeliverMessages(); 187 DeliverMessages();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 } 244 }
221 } 245 }
222 246
223 void SynchronousCompositorImpl::DidStopFlinging() { 247 void SynchronousCompositorImpl::DidStopFlinging() {
224 RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>( 248 RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
225 contents_->GetRenderWidgetHostView()); 249 contents_->GetRenderWidgetHostView());
226 if (rwhv) 250 if (rwhv)
227 rwhv->DidStopFlinging(); 251 rwhv->DidStopFlinging();
228 } 252 }
229 253
230 void SynchronousCompositorImpl::SetContinuousInvalidate(bool enable) { 254 void SynchronousCompositorImpl::SetContinuousInvalidate(
255 bool needs_begin_frames) const {
231 DCHECK(CalledOnValidThread()); 256 DCHECK(CalledOnValidThread());
232 if (compositor_client_) 257 if (compositor_client_)
233 compositor_client_->SetContinuousInvalidate(enable); 258 compositor_client_->SetContinuousInvalidate(needs_begin_frames);
boliu 2014/10/24 17:42:40 We want to hold off on this if invoking_composite_
simonhong 2014/10/29 14:47:13 Made early out if invoking_composite_ is true.
234 } 259 }
235 260
236 InputEventAckState SynchronousCompositorImpl::HandleInputEvent( 261 InputEventAckState SynchronousCompositorImpl::HandleInputEvent(
237 const blink::WebInputEvent& input_event) { 262 const blink::WebInputEvent& input_event) {
238 DCHECK(CalledOnValidThread()); 263 DCHECK(CalledOnValidThread());
239 return g_factory.Get().synchronous_input_event_filter()->HandleInputEvent( 264 return g_factory.Get().synchronous_input_event_filter()->HandleInputEvent(
240 contents_->GetRoutingID(), input_event); 265 contents_->GetRoutingID(), input_event);
241 } 266 }
242 267
243 void SynchronousCompositorImpl::DeliverMessages() { 268 void SynchronousCompositorImpl::DeliverMessages() {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 g_factory.Get(); // Ensure it's initialized. 335 g_factory.Get(); // Ensure it's initialized.
311 SynchronousCompositorImpl::CreateForWebContents(contents); 336 SynchronousCompositorImpl::CreateForWebContents(contents);
312 } 337 }
313 if (SynchronousCompositorImpl* instance = 338 if (SynchronousCompositorImpl* instance =
314 SynchronousCompositorImpl::FromWebContents(contents)) { 339 SynchronousCompositorImpl::FromWebContents(contents)) {
315 instance->SetClient(client); 340 instance->SetClient(client);
316 } 341 }
317 } 342 }
318 343
319 } // namespace content 344 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698