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

Side by Side Diff: android_webview/browser/browser_view_renderer_impl.cc

Issue 12774006: cc: Chromify Layer and LayerImpl classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: MoreAndroidCompilings Created 7 years, 9 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
« no previous file with comments | « no previous file | cc/content_layer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "android_webview/browser/browser_view_renderer_impl.h" 5 #include "android_webview/browser/browser_view_renderer_impl.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "android_webview/common/renderer_picture_map.h" 9 #include "android_webview/common/renderer_picture_map.h"
10 #include "android_webview/public/browser/draw_gl.h" 10 #include "android_webview/public/browser/draw_gl.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 return UserData::GetInstance(contents); 126 return UserData::GetInstance(contents);
127 } 127 }
128 128
129 BrowserViewRendererImpl::BrowserViewRendererImpl( 129 BrowserViewRendererImpl::BrowserViewRendererImpl(
130 BrowserViewRenderer::Client* client, 130 BrowserViewRenderer::Client* client,
131 JavaHelper* java_helper) 131 JavaHelper* java_helper)
132 : client_(client), 132 : client_(client),
133 java_helper_(java_helper), 133 java_helper_(java_helper),
134 view_renderer_host_(new ViewRendererHost(NULL, this)), 134 view_renderer_host_(new ViewRendererHost(NULL, this)),
135 ALLOW_THIS_IN_INITIALIZER_LIST(compositor_(Compositor::Create(this))), 135 ALLOW_THIS_IN_INITIALIZER_LIST(compositor_(Compositor::Create(this))),
136 view_clip_layer_(cc::Layer::create()), 136 view_clip_layer_(cc::Layer::Create()),
137 transform_layer_(cc::Layer::create()), 137 transform_layer_(cc::Layer::Create()),
138 scissor_clip_layer_(cc::Layer::create()), 138 scissor_clip_layer_(cc::Layer::Create()),
139 view_visible_(false), 139 view_visible_(false),
140 compositor_visible_(false), 140 compositor_visible_(false),
141 is_composite_pending_(false), 141 is_composite_pending_(false),
142 dpi_scale_(1.0f), 142 dpi_scale_(1.0f),
143 page_scale_(1.0f), 143 page_scale_(1.0f),
144 on_new_picture_mode_(kOnNewPictureDisabled), 144 on_new_picture_mode_(kOnNewPictureDisabled),
145 last_frame_context_(NULL), 145 last_frame_context_(NULL),
146 web_contents_(NULL), 146 web_contents_(NULL),
147 update_frame_info_callback_( 147 update_frame_info_callback_(
148 base::Bind(&BrowserViewRendererImpl::OnFrameInfoUpdated, 148 base::Bind(&BrowserViewRendererImpl::OnFrameInfoUpdated,
149 base::Unretained(ALLOW_THIS_IN_INITIALIZER_LIST(this)))) { 149 base::Unretained(ALLOW_THIS_IN_INITIALIZER_LIST(this)))) {
150 150
151 DCHECK(java_helper); 151 DCHECK(java_helper);
152 152
153 // Define the view hierarchy. 153 // Define the view hierarchy.
154 transform_layer_->addChild(view_clip_layer_); 154 transform_layer_->AddChild(view_clip_layer_);
155 scissor_clip_layer_->addChild(transform_layer_); 155 scissor_clip_layer_->AddChild(transform_layer_);
156 compositor_->SetRootLayer(scissor_clip_layer_); 156 compositor_->SetRootLayer(scissor_clip_layer_);
157 157
158 RendererPictureMap::CreateInstance(); 158 RendererPictureMap::CreateInstance();
159 } 159 }
160 160
161 BrowserViewRendererImpl::~BrowserViewRendererImpl() { 161 BrowserViewRendererImpl::~BrowserViewRendererImpl() {
162 SetContents(NULL); 162 SetContents(NULL);
163 } 163 }
164 164
165 // static 165 // static
(...skipping 22 matching lines...) Expand all
188 if (!content_view_core) 188 if (!content_view_core)
189 return; 189 return;
190 190
191 web_contents_ = content_view_core->GetWebContents(); 191 web_contents_ = content_view_core->GetWebContents();
192 web_contents_->SetUserData(kUserDataKey, new UserData(this)); 192 web_contents_->SetUserData(kUserDataKey, new UserData(this));
193 view_renderer_host_->Observe(web_contents_); 193 view_renderer_host_->Observe(web_contents_);
194 194
195 content_view_core->AddFrameInfoCallback(update_frame_info_callback_); 195 content_view_core->AddFrameInfoCallback(update_frame_info_callback_);
196 dpi_scale_ = content_view_core->GetDpiScale(); 196 dpi_scale_ = content_view_core->GetDpiScale();
197 197
198 view_clip_layer_->removeAllChildren(); 198 view_clip_layer_->RemoveAllChildren();
199 view_clip_layer_->addChild(content_view_core->GetLayer()); 199 view_clip_layer_->AddChild(content_view_core->GetLayer());
200 Invalidate(); 200 Invalidate();
201 } 201 }
202 202
203 void BrowserViewRendererImpl::WebContentsGone() { 203 void BrowserViewRendererImpl::WebContentsGone() {
204 web_contents_ = NULL; 204 web_contents_ = NULL;
205 } 205 }
206 206
207 void BrowserViewRendererImpl::DrawGL(AwDrawGLInfo* draw_info) { 207 void BrowserViewRendererImpl::DrawGL(AwDrawGLInfo* draw_info) {
208 TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::DrawGL"); 208 TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::DrawGL");
209 209
(...skipping 21 matching lines...) Expand all
231 last_frame_context_ = current_context; 231 last_frame_context_ = current_context;
232 } 232 }
233 233
234 compositor_->SetWindowBounds(gfx::Size(draw_info->width, draw_info->height)); 234 compositor_->SetWindowBounds(gfx::Size(draw_info->width, draw_info->height));
235 235
236 if (draw_info->is_layer) { 236 if (draw_info->is_layer) {
237 // When rendering into a separate layer no view clipping, transform, 237 // When rendering into a separate layer no view clipping, transform,
238 // scissoring or background transparency need to be handled. 238 // scissoring or background transparency need to be handled.
239 // The Android framework will composite us afterwards. 239 // The Android framework will composite us afterwards.
240 compositor_->SetHasTransparentBackground(false); 240 compositor_->SetHasTransparentBackground(false);
241 view_clip_layer_->setMasksToBounds(false); 241 view_clip_layer_->SetMasksToBounds(false);
242 transform_layer_->setTransform(gfx::Transform()); 242 transform_layer_->SetTransform(gfx::Transform());
243 scissor_clip_layer_->setMasksToBounds(false); 243 scissor_clip_layer_->SetMasksToBounds(false);
244 scissor_clip_layer_->setPosition(gfx::PointF()); 244 scissor_clip_layer_->SetPosition(gfx::PointF());
245 scissor_clip_layer_->setBounds(gfx::Size()); 245 scissor_clip_layer_->SetBounds(gfx::Size());
246 scissor_clip_layer_->setSublayerTransform(gfx::Transform()); 246 scissor_clip_layer_->SetSublayerTransform(gfx::Transform());
247 247
248 } else { 248 } else {
249 compositor_->SetHasTransparentBackground(true); 249 compositor_->SetHasTransparentBackground(true);
250 250
251 gfx::Rect clip_rect(draw_info->clip_left, draw_info->clip_top, 251 gfx::Rect clip_rect(draw_info->clip_left, draw_info->clip_top,
252 draw_info->clip_right - draw_info->clip_left, 252 draw_info->clip_right - draw_info->clip_left,
253 draw_info->clip_bottom - draw_info->clip_top); 253 draw_info->clip_bottom - draw_info->clip_top);
254 254
255 scissor_clip_layer_->setPosition(clip_rect.origin()); 255 scissor_clip_layer_->SetPosition(clip_rect.origin());
256 scissor_clip_layer_->setBounds(clip_rect.size()); 256 scissor_clip_layer_->SetBounds(clip_rect.size());
257 scissor_clip_layer_->setMasksToBounds(true); 257 scissor_clip_layer_->SetMasksToBounds(true);
258 258
259 // The compositor clipping architecture enforces us to have the clip layer 259 // The compositor clipping architecture enforces us to have the clip layer
260 // as an ancestor of the area we want to clip, but this makes the transform 260 // as an ancestor of the area we want to clip, but this makes the transform
261 // become relative to the clip area rather than the full surface. The clip 261 // become relative to the clip area rather than the full surface. The clip
262 // position offset needs to be undone before applying the transform. 262 // position offset needs to be undone before applying the transform.
263 gfx::Transform undo_clip_position; 263 gfx::Transform undo_clip_position;
264 undo_clip_position.Translate(-clip_rect.x(), -clip_rect.y()); 264 undo_clip_position.Translate(-clip_rect.x(), -clip_rect.y());
265 scissor_clip_layer_->setSublayerTransform(undo_clip_position); 265 scissor_clip_layer_->SetSublayerTransform(undo_clip_position);
266 266
267 gfx::Transform transform; 267 gfx::Transform transform;
268 transform.matrix().setColMajorf(draw_info->transform); 268 transform.matrix().setColMajorf(draw_info->transform);
269 269
270 // The scrolling values of the Android Framework affect the transformation 270 // The scrolling values of the Android Framework affect the transformation
271 // matrix. This needs to be undone to let the compositor handle scrolling. 271 // matrix. This needs to be undone to let the compositor handle scrolling.
272 // TODO(leandrogracia): when scrolling becomes synchronous we should undo 272 // TODO(leandrogracia): when scrolling becomes synchronous we should undo
273 // or override the translation in the compositor, not the one coming from 273 // or override the translation in the compositor, not the one coming from
274 // the Android View System, as it could be out of bounds for overscrolling. 274 // the Android View System, as it could be out of bounds for overscrolling.
275 transform.Translate(hw_rendering_scroll_.x(), hw_rendering_scroll_.y()); 275 transform.Translate(hw_rendering_scroll_.x(), hw_rendering_scroll_.y());
276 transform_layer_->setTransform(transform); 276 transform_layer_->SetTransform(transform);
277 277
278 view_clip_layer_->setMasksToBounds(true); 278 view_clip_layer_->SetMasksToBounds(true);
279 } 279 }
280 280
281 compositor_->Composite(); 281 compositor_->Composite();
282 is_composite_pending_ = false; 282 is_composite_pending_ = false;
283 283
284 // The GL functor must ensure these are set to zero before returning. 284 // The GL functor must ensure these are set to zero before returning.
285 // Not setting them leads to graphical artifacts that can affect other apps. 285 // Not setting them leads to graphical artifacts that can affect other apps.
286 glBindBuffer(GL_ARRAY_BUFFER, 0); 286 glBindBuffer(GL_ARRAY_BUFFER, 0);
287 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 287 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
288 } 288 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 } 398 }
399 399
400 void BrowserViewRendererImpl::OnVisibilityChanged(bool view_visible, 400 void BrowserViewRendererImpl::OnVisibilityChanged(bool view_visible,
401 bool window_visible) { 401 bool window_visible) {
402 view_visible_ = window_visible && view_visible; 402 view_visible_ = window_visible && view_visible;
403 Invalidate(); 403 Invalidate();
404 } 404 }
405 405
406 void BrowserViewRendererImpl::OnSizeChanged(int width, int height) { 406 void BrowserViewRendererImpl::OnSizeChanged(int width, int height) {
407 view_size_ = gfx::Size(width, height); 407 view_size_ = gfx::Size(width, height);
408 view_clip_layer_->setBounds(view_size_); 408 view_clip_layer_->SetBounds(view_size_);
409 } 409 }
410 410
411 void BrowserViewRendererImpl::OnAttachedToWindow(int width, int height) { 411 void BrowserViewRendererImpl::OnAttachedToWindow(int width, int height) {
412 view_size_ = gfx::Size(width, height); 412 view_size_ = gfx::Size(width, height);
413 view_clip_layer_->setBounds(view_size_); 413 view_clip_layer_->SetBounds(view_size_);
414 } 414 }
415 415
416 void BrowserViewRendererImpl::OnDetachedFromWindow() { 416 void BrowserViewRendererImpl::OnDetachedFromWindow() {
417 view_visible_ = false; 417 view_visible_ = false;
418 SetCompositorVisibility(false); 418 SetCompositorVisibility(false);
419 } 419 }
420 420
421 void BrowserViewRendererImpl::ScheduleComposite() { 421 void BrowserViewRendererImpl::ScheduleComposite() {
422 TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::ScheduleComposite"); 422 TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::ScheduleComposite");
423 423
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 512
513 void BrowserViewRendererImpl::OnFrameInfoUpdated( 513 void BrowserViewRendererImpl::OnFrameInfoUpdated(
514 const gfx::SizeF& content_size, 514 const gfx::SizeF& content_size,
515 const gfx::Vector2dF& scroll_offset, 515 const gfx::Vector2dF& scroll_offset,
516 float page_scale_factor) { 516 float page_scale_factor) {
517 page_scale_ = page_scale_factor; 517 page_scale_ = page_scale_factor;
518 content_size_css_ = content_size; 518 content_size_css_ = content_size;
519 } 519 }
520 520
521 } // namespace android_webview 521 } // namespace android_webview
OLDNEW
« no previous file with comments | « no previous file | cc/content_layer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698