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

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

Issue 269913002: aw: Fix invalidate getting lost (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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.h" 5 #include "android_webview/browser/browser_view_renderer.h"
6 6
7 #include "android_webview/browser/browser_view_renderer_client.h" 7 #include "android_webview/browser/browser_view_renderer_client.h"
8 #include "android_webview/browser/shared_renderer_state.h" 8 #include "android_webview/browser/shared_renderer_state.h"
9 #include "android_webview/public/browser/draw_gl.h" 9 #include "android_webview/public/browser/draw_gl.h"
10 #include "base/android/jni_android.h" 10 #include "base/android/jni_android.h"
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 TRACE_EVENT0("android_webview", "BrowserViewRenderer::CapturePicture"); 286 TRACE_EVENT0("android_webview", "BrowserViewRenderer::CapturePicture");
287 287
288 // Return empty Picture objects for empty SkPictures. 288 // Return empty Picture objects for empty SkPictures.
289 if (width <= 0 || height <= 0) { 289 if (width <= 0 || height <= 0) {
290 return skia::AdoptRef(new SkPicture); 290 return skia::AdoptRef(new SkPicture);
291 } 291 }
292 292
293 // Reset scroll back to the origin, will go back to the old 293 // Reset scroll back to the origin, will go back to the old
294 // value when scroll_reset is out of scope. 294 // value when scroll_reset is out of scope.
295 AutoResetWithLock scroll_reset( 295 AutoResetWithLock scroll_reset(
296 &scroll_offset_dip_, gfx::Vector2dF(), scroll_offset_dip_lock_); 296 &scroll_offset_dip_, gfx::Vector2dF(), render_thread_lock_);
297 297
298 SkPictureRecorder recorder; 298 SkPictureRecorder recorder;
299 SkCanvas* rec_canvas = recorder.beginRecording(width, height, NULL, 0); 299 SkCanvas* rec_canvas = recorder.beginRecording(width, height, NULL, 0);
300 if (has_compositor_) 300 if (has_compositor_)
301 CompositeSW(rec_canvas); 301 CompositeSW(rec_canvas);
302 return skia::AdoptRef(recorder.endRecording()); 302 return skia::AdoptRef(recorder.endRecording());
303 } 303 }
304 304
305 void BrowserViewRenderer::EnableOnNewPicture(bool enabled) { 305 void BrowserViewRenderer::EnableOnNewPicture(bool enabled) {
306 on_new_picture_enable_ = enabled; 306 on_new_picture_enable_ = enabled;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 void BrowserViewRenderer::DidDestroyCompositor( 410 void BrowserViewRenderer::DidDestroyCompositor(
411 content::SynchronousCompositor* compositor) { 411 content::SynchronousCompositor* compositor) {
412 TRACE_EVENT0("android_webview", "BrowserViewRenderer::DidDestroyCompositor"); 412 TRACE_EVENT0("android_webview", "BrowserViewRenderer::DidDestroyCompositor");
413 DCHECK(has_compositor_); 413 DCHECK(has_compositor_);
414 DCHECK(ui_task_runner_->BelongsToCurrentThread()); 414 DCHECK(ui_task_runner_->BelongsToCurrentThread());
415 has_compositor_ = false; 415 has_compositor_ = false;
416 shared_renderer_state_->SetCompositorOnUiThread(NULL); 416 shared_renderer_state_->SetCompositorOnUiThread(NULL);
417 SynchronousCompositorMemoryPolicy zero_policy; 417 SynchronousCompositorMemoryPolicy zero_policy;
418 DCHECK(shared_renderer_state_->GetMemoryPolicy() == zero_policy); 418 DCHECK(shared_renderer_state_->GetMemoryPolicy() == zero_policy);
419 } 419 }
420 420
sgurun-gerrit only 2014/05/05 17:11:01 Please add explanation here why you need to set th
boliu 2014/05/05 17:13:41 There is already a comment in the header saying th
sgurun-gerrit only 2014/05/05 17:24:53 If it is temporary it is ok, otherwise the explana
421 void BrowserViewRenderer::SetContinuousInvalidate(bool invalidate) { 421 void BrowserViewRenderer::SetContinuousInvalidate(bool invalidate) {
422 if (!ui_task_runner_->BelongsToCurrentThread()) { 422 {
423 ui_task_runner_->PostTask( 423 base::AutoLock lock(render_thread_lock_);
424 FROM_HERE, 424 if (compositor_needs_continuous_invalidate_ == invalidate)
425 base::Bind(&BrowserViewRenderer::SetContinuousInvalidate, 425 return;
426 ui_thread_weak_ptr_, 426
427 invalidate)); 427 TRACE_EVENT_INSTANT1("android_webview",
428 "BrowserViewRenderer::SetContinuousInvalidate",
429 TRACE_EVENT_SCOPE_THREAD,
430 "invalidate",
431 invalidate);
432 compositor_needs_continuous_invalidate_ = invalidate;
433 }
434
435 if (ui_task_runner_->BelongsToCurrentThread()) {
436 EnsureContinuousInvalidation(false);
428 return; 437 return;
429 } 438 }
430 if (compositor_needs_continuous_invalidate_ == invalidate) 439 ui_task_runner_->PostTask(
431 return; 440 FROM_HERE,
432 441 base::Bind(&BrowserViewRenderer::EnsureContinuousInvalidation,
433 TRACE_EVENT_INSTANT1("android_webview", 442 ui_thread_weak_ptr_,
434 "BrowserViewRenderer::SetContinuousInvalidate", 443 false));
435 TRACE_EVENT_SCOPE_THREAD,
436 "invalidate",
437 invalidate);
438 compositor_needs_continuous_invalidate_ = invalidate;
439 EnsureContinuousInvalidation(false);
440 } 444 }
441 445
442 void BrowserViewRenderer::SetDipScale(float dip_scale) { 446 void BrowserViewRenderer::SetDipScale(float dip_scale) {
443 dip_scale_ = dip_scale; 447 dip_scale_ = dip_scale;
444 CHECK(dip_scale_ > 0); 448 CHECK(dip_scale_ > 0);
445 } 449 }
446 450
447 gfx::Vector2d BrowserViewRenderer::max_scroll_offset() const { 451 gfx::Vector2d BrowserViewRenderer::max_scroll_offset() const {
448 DCHECK_GT(dip_scale_, 0); 452 DCHECK_GT(dip_scale_, 0);
449 return gfx::ToCeiledVector2d(gfx::ScaleVector2d( 453 return gfx::ToCeiledVector2d(gfx::ScaleVector2d(
(...skipping 15 matching lines...) Expand all
465 scroll_offset_dip.set_y((scroll_offset.y() * max_scroll_offset_dip_.y()) / 469 scroll_offset_dip.set_y((scroll_offset.y() * max_scroll_offset_dip_.y()) /
466 max_offset.y()); 470 max_offset.y());
467 } 471 }
468 472
469 DCHECK_LE(0, scroll_offset_dip.x()); 473 DCHECK_LE(0, scroll_offset_dip.x());
470 DCHECK_LE(0, scroll_offset_dip.y()); 474 DCHECK_LE(0, scroll_offset_dip.y());
471 DCHECK_LE(scroll_offset_dip.x(), max_scroll_offset_dip_.x()); 475 DCHECK_LE(scroll_offset_dip.x(), max_scroll_offset_dip_.x());
472 DCHECK_LE(scroll_offset_dip.y(), max_scroll_offset_dip_.y()); 476 DCHECK_LE(scroll_offset_dip.y(), max_scroll_offset_dip_.y());
473 477
474 { 478 {
475 base::AutoLock lock(scroll_offset_dip_lock_); 479 base::AutoLock lock(render_thread_lock_);
476 if (scroll_offset_dip_ == scroll_offset_dip) 480 if (scroll_offset_dip_ == scroll_offset_dip)
477 return; 481 return;
478 482
479 scroll_offset_dip_ = scroll_offset_dip; 483 scroll_offset_dip_ = scroll_offset_dip;
480 } 484 }
481 485
482 if (has_compositor_) 486 if (has_compositor_)
483 shared_renderer_state_->GetCompositor()-> 487 shared_renderer_state_->GetCompositor()->
484 DidChangeRootLayerScrollOffset(); 488 DidChangeRootLayerScrollOffset();
485 } 489 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 if (!ui_task_runner_->BelongsToCurrentThread()) { 527 if (!ui_task_runner_->BelongsToCurrentThread()) {
524 ui_task_runner_->PostTask( 528 ui_task_runner_->PostTask(
525 FROM_HERE, 529 FROM_HERE,
526 base::Bind(&BrowserViewRenderer::SetTotalRootLayerScrollOffset, 530 base::Bind(&BrowserViewRenderer::SetTotalRootLayerScrollOffset,
527 ui_thread_weak_ptr_, 531 ui_thread_weak_ptr_,
528 scroll_offset_dip)); 532 scroll_offset_dip));
529 return; 533 return;
530 } 534 }
531 535
532 { 536 {
533 base::AutoLock lock(scroll_offset_dip_lock_); 537 base::AutoLock lock(render_thread_lock_);
534 // TOOD(mkosiba): Add a DCHECK to say that this does _not_ get called during 538 // TOOD(mkosiba): Add a DCHECK to say that this does _not_ get called during
535 // DrawGl when http://crbug.com/249972 is fixed. 539 // DrawGl when http://crbug.com/249972 is fixed.
536 if (scroll_offset_dip_ == scroll_offset_dip) 540 if (scroll_offset_dip_ == scroll_offset_dip)
537 return; 541 return;
538 542
539 scroll_offset_dip_ = scroll_offset_dip; 543 scroll_offset_dip_ = scroll_offset_dip;
540 } 544 }
541 545
542 gfx::Vector2d max_offset = max_scroll_offset(); 546 gfx::Vector2d max_offset = max_scroll_offset();
543 gfx::Vector2d scroll_offset; 547 gfx::Vector2d scroll_offset;
(...skipping 13 matching lines...) Expand all
557 DCHECK(0 <= scroll_offset.y()); 561 DCHECK(0 <= scroll_offset.y());
558 // Disabled because the conditions are being violated while running 562 // Disabled because the conditions are being violated while running
559 // AwZoomTest.testMagnification, see http://crbug.com/340648 563 // AwZoomTest.testMagnification, see http://crbug.com/340648
560 // DCHECK(scroll_offset.x() <= max_offset.x()); 564 // DCHECK(scroll_offset.x() <= max_offset.x());
561 // DCHECK(scroll_offset.y() <= max_offset.y()); 565 // DCHECK(scroll_offset.y() <= max_offset.y());
562 566
563 client_->ScrollContainerViewTo(scroll_offset); 567 client_->ScrollContainerViewTo(scroll_offset);
564 } 568 }
565 569
566 gfx::Vector2dF BrowserViewRenderer::GetTotalRootLayerScrollOffset() { 570 gfx::Vector2dF BrowserViewRenderer::GetTotalRootLayerScrollOffset() {
567 base::AutoLock lock(scroll_offset_dip_lock_); 571 base::AutoLock lock(render_thread_lock_);
568 return scroll_offset_dip_; 572 return scroll_offset_dip_;
569 } 573 }
570 574
571 bool BrowserViewRenderer::IsExternalFlingActive() const { 575 bool BrowserViewRenderer::IsExternalFlingActive() const {
572 if (!ui_task_runner_->BelongsToCurrentThread()) { 576 if (!ui_task_runner_->BelongsToCurrentThread()) {
573 // TODO(boliu): This is short term hack since we cannot call into 577 // TODO(boliu): This is short term hack since we cannot call into
574 // view system on non-UI thread. 578 // view system on non-UI thread.
575 return false; 579 return false;
576 } 580 }
577 return client_->IsFlingActive(); 581 return client_->IsFlingActive();
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 base::StringAppendF(&str, 750 base::StringAppendF(&str,
747 "surface width height: [%d %d] ", 751 "surface width height: [%d %d] ",
748 draw_info->width, 752 draw_info->width,
749 draw_info->height); 753 draw_info->height);
750 base::StringAppendF(&str, "is_layer: %d ", draw_info->is_layer); 754 base::StringAppendF(&str, "is_layer: %d ", draw_info->is_layer);
751 } 755 }
752 return str; 756 return str;
753 } 757 }
754 758
755 } // namespace android_webview 759 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698