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

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

Issue 287993004: [Android WebView] Implement Ubercomp for Render Thread support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 6 years, 7 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 | Annotate | Revision Log
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/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "cc/input/input_handler.h" 9 #include "cc/input/input_handler.h"
10 #include "content/browser/android/in_process/synchronous_compositor_factory_impl .h" 10 #include "content/browser/android/in_process/synchronous_compositor_factory_impl .h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 SynchronousCompositorImpl* SynchronousCompositorImpl::FromRoutingID( 60 SynchronousCompositorImpl* SynchronousCompositorImpl::FromRoutingID(
61 int routing_id) { 61 int routing_id) {
62 return FromID(GetInProcessRendererId(), routing_id); 62 return FromID(GetInProcessRendererId(), routing_id);
63 } 63 }
64 64
65 SynchronousCompositorImpl::SynchronousCompositorImpl(WebContents* contents) 65 SynchronousCompositorImpl::SynchronousCompositorImpl(WebContents* contents)
66 : compositor_client_(NULL), 66 : compositor_client_(NULL),
67 output_surface_(NULL), 67 output_surface_(NULL),
68 contents_(contents), 68 contents_(contents),
69 input_handler_(NULL) { 69 input_handler_(NULL),
70 weak_ptr_factory_(this) {
70 DCHECK(contents); 71 DCHECK(contents);
71 } 72 }
72 73
73 SynchronousCompositorImpl::~SynchronousCompositorImpl() { 74 SynchronousCompositorImpl::~SynchronousCompositorImpl() {
74 if (compositor_client_) 75 if (compositor_client_)
75 compositor_client_->DidDestroyCompositor(this); 76 compositor_client_->DidDestroyCompositor(this);
76 SetInputHandler(NULL); 77 SetInputHandler(NULL);
77 } 78 }
78 79
79 void SynchronousCompositorImpl::SetClient( 80 void SynchronousCompositorImpl::SetClient(
(...skipping 23 matching lines...) Expand all
103 return success; 104 return success;
104 } 105 }
105 106
106 void SynchronousCompositorImpl::ReleaseHwDraw() { 107 void SynchronousCompositorImpl::ReleaseHwDraw() {
107 DCHECK(CalledOnValidThread()); 108 DCHECK(CalledOnValidThread());
108 DCHECK(output_surface_); 109 DCHECK(output_surface_);
109 output_surface_->ReleaseHwDraw(); 110 output_surface_->ReleaseHwDraw();
110 g_factory.Get().CompositorReleasedHardwareDraw(); 111 g_factory.Get().CompositorReleasedHardwareDraw();
111 } 112 }
112 113
113 bool SynchronousCompositorImpl::DemandDrawHw( 114 gpu::GLInProcessContext* SynchronousCompositorImpl::GetShareContext() {
114 gfx::Size surface_size, 115 DCHECK(CalledOnValidThread());
115 const gfx::Transform& transform, 116 return g_factory.Get().GetShareContext();
116 gfx::Rect viewport, 117 }
117 gfx::Rect clip, 118
118 bool stencil_enabled) { 119 bool SynchronousCompositorImpl::DemandDrawHw(gfx::Size surface_size,
120 const gfx::Transform& transform,
121 gfx::Rect viewport,
122 gfx::Rect clip,
123 bool stencil_enabled,
124 cc::CompositorFrame* frame) {
119 DCHECK(CalledOnValidThread()); 125 DCHECK(CalledOnValidThread());
no sievers 2014/05/20 20:48:26 So this is either on the UI thread (legacy) or on
boliu 2014/05/21 01:33:26 Ehh, exact opposite. This is called on UI thread
120 DCHECK(output_surface_); 126 DCHECK(output_surface_);
127 DCHECK(frame);
121 128
122 return output_surface_->DemandDrawHw( 129 bool result = output_surface_->DemandDrawHw(
123 surface_size, transform, viewport, clip, stencil_enabled); 130 surface_size, transform, viewport, clip, stencil_enabled, frame);
131 if (result)
132 UpdateFrameMetaData(frame->metadata);
133 return result;
134 }
135
136 void SynchronousCompositorImpl::ReturnResources(
137 const cc::CompositorFrameAck& frame_ack) {
138 DCHECK(CalledOnValidThread());
139 output_surface_->ReturnResources(frame_ack);
124 } 140 }
125 141
126 bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) { 142 bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) {
127 DCHECK(CalledOnValidThread()); 143 DCHECK(CalledOnValidThread());
128 DCHECK(output_surface_); 144 DCHECK(output_surface_);
129 145
130 return output_surface_->DemandDrawSw(canvas); 146 cc::CompositorFrame frame;
147 bool result = output_surface_->DemandDrawSw(canvas, &frame);
148 if (result)
149 UpdateFrameMetaData(frame.metadata);
150 return result;
151 }
152
153 void SynchronousCompositorImpl::UpdateFrameMetaData(
154 const cc::CompositorFrameMetadata& frame_metadata) {
155 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
156 BrowserThread::PostTask(
157 BrowserThread::UI,
158 FROM_HERE,
159 base::Bind(&SynchronousCompositorImpl::UpdateFrameMetaData,
160 weak_ptr_factory_.GetWeakPtr(),
161 frame_metadata));
162 return;
163 }
164 RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
165 contents_->GetRenderWidgetHostView());
166 if (rwhv)
167 rwhv->SynchronousFrameMetadata(frame_metadata);
131 } 168 }
132 169
133 void SynchronousCompositorImpl::SetMemoryPolicy( 170 void SynchronousCompositorImpl::SetMemoryPolicy(
134 const SynchronousCompositorMemoryPolicy& policy) { 171 const SynchronousCompositorMemoryPolicy& policy) {
135 DCHECK(CalledOnValidThread()); 172 DCHECK(CalledOnValidThread());
136 DCHECK(output_surface_); 173 DCHECK(output_surface_);
137 174
138 output_surface_->SetMemoryPolicy(policy); 175 output_surface_->SetMemoryPolicy(policy);
139 } 176 }
140 177
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 compositor_client_->SetContinuousInvalidate(enable); 237 compositor_client_->SetContinuousInvalidate(enable);
201 } 238 }
202 239
203 InputEventAckState SynchronousCompositorImpl::HandleInputEvent( 240 InputEventAckState SynchronousCompositorImpl::HandleInputEvent(
204 const blink::WebInputEvent& input_event) { 241 const blink::WebInputEvent& input_event) {
205 DCHECK(CalledOnValidThread()); 242 DCHECK(CalledOnValidThread());
206 return g_factory.Get().synchronous_input_event_filter()->HandleInputEvent( 243 return g_factory.Get().synchronous_input_event_filter()->HandleInputEvent(
207 contents_->GetRoutingID(), input_event); 244 contents_->GetRoutingID(), input_event);
208 } 245 }
209 246
210 void SynchronousCompositorImpl::UpdateFrameMetaData(
211 const cc::CompositorFrameMetadata& frame_metadata) {
212 RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
213 contents_->GetRenderWidgetHostView());
214 if (rwhv)
215 rwhv->SynchronousFrameMetadata(frame_metadata);
216 }
217
218 void SynchronousCompositorImpl::DidActivatePendingTree() { 247 void SynchronousCompositorImpl::DidActivatePendingTree() {
219 if (compositor_client_) 248 if (compositor_client_)
220 compositor_client_->DidUpdateContent(); 249 compositor_client_->DidUpdateContent();
221 } 250 }
222 251
223 gfx::Vector2dF SynchronousCompositorImpl::GetTotalScrollOffset() { 252 gfx::Vector2dF SynchronousCompositorImpl::GetTotalScrollOffset() {
224 DCHECK(CalledOnValidThread()); 253 DCHECK(CalledOnValidThread());
225 if (compositor_client_) 254 if (compositor_client_)
226 return compositor_client_->GetTotalRootLayerScrollOffset(); 255 return compositor_client_->GetTotalRootLayerScrollOffset();
227 return gfx::Vector2dF(); 256 return gfx::Vector2dF();
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 g_factory.Get(); // Ensure it's initialized. 297 g_factory.Get(); // Ensure it's initialized.
269 SynchronousCompositorImpl::CreateForWebContents(contents); 298 SynchronousCompositorImpl::CreateForWebContents(contents);
270 } 299 }
271 if (SynchronousCompositorImpl* instance = 300 if (SynchronousCompositorImpl* instance =
272 SynchronousCompositorImpl::FromWebContents(contents)) { 301 SynchronousCompositorImpl::FromWebContents(contents)) {
273 instance->SetClient(client); 302 instance->SetClient(client);
274 } 303 }
275 } 304 }
276 305
277 } // namespace content 306 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698