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

Side by Side Diff: content/renderer/render_widget.cc

Issue 8528006: Fix resize issues when using threaded compositing (Closed)
Patch Set: Created 9 years, 1 month 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
« no previous file with comments | « content/renderer/render_widget.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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/renderer/render_widget.h" 5 #include "content/renderer/render_widget.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 381
382 // Continue painting if necessary... 382 // Continue painting if necessary...
383 DoDeferredUpdateAndSendInputAck(); 383 DoDeferredUpdateAndSendInputAck();
384 } 384 }
385 385
386 bool RenderWidget::SupportsAsynchronousSwapBuffers() 386 bool RenderWidget::SupportsAsynchronousSwapBuffers()
387 { 387 {
388 return false; 388 return false;
389 } 389 }
390 390
391 void RenderWidget::OnSwapBuffersAborted() 391 void RenderWidget::OnSwapBuffersAborted() {
392 { 392 if (WebWidgetHandlesCompositorScheduling())
393 return;
394
393 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted"); 395 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted");
394 while (!updates_pending_swap_.empty()) { 396 while (!updates_pending_swap_.empty()) {
395 ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front(); 397 ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front();
396 updates_pending_swap_.pop(); 398 updates_pending_swap_.pop();
397 if (msg) 399 if (msg)
398 Send(msg); 400 Send(msg);
399 } 401 }
400 num_swapbuffers_complete_pending_ = 0; 402 num_swapbuffers_complete_pending_ = 0;
401 using_asynchronous_swapbuffers_ = false; 403 using_asynchronous_swapbuffers_ = false;
402 // Schedule another frame so the compositor learns about it. 404 // Schedule another frame so the compositor learns about it.
403 scheduleComposite(); 405 scheduleComposite();
404 } 406 }
405 407
406 void RenderWidget::OnSwapBuffersPosted() { 408 void RenderWidget::OnSwapBuffersPosted() {
nduca 2011/11/11 06:01:08 Can we get rid of this completely? E.g. never use
409 if (WebWidgetHandlesCompositorScheduling())
410 return;
411
407 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersPosted"); 412 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersPosted");
408 413
409 if (using_asynchronous_swapbuffers_) { 414 if (using_asynchronous_swapbuffers_) {
410 ViewHostMsg_UpdateRect* msg = NULL; 415 ViewHostMsg_UpdateRect* msg = NULL;
411 if (pending_update_params_.get()) { 416 if (pending_update_params_.get()) {
412 msg = new ViewHostMsg_UpdateRect(routing_id_, *pending_update_params_); 417 msg = new ViewHostMsg_UpdateRect(routing_id_, *pending_update_params_);
413 pending_update_params_.reset(); 418 pending_update_params_.reset();
414 } 419 }
415 updates_pending_swap_.push(msg); 420 updates_pending_swap_.push(msg);
416 num_swapbuffers_complete_pending_++; 421 num_swapbuffers_complete_pending_++;
417 } 422 }
418 } 423 }
419 424
420 void RenderWidget::OnSwapBuffersComplete() { 425 void RenderWidget::OnSwapBuffersComplete() {
426 if (WebWidgetHandlesCompositorScheduling())
427 return;
428
421 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersComplete"); 429 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersComplete");
422 // When compositing deactivates, we reset the swapbuffers pending count. The 430 // When compositing deactivates, we reset the swapbuffers pending count. The
423 // swapbuffers acks may still arrive, however. 431 // swapbuffers acks may still arrive, however.
424 if (num_swapbuffers_complete_pending_ == 0) { 432 if (num_swapbuffers_complete_pending_ == 0) {
425 TRACE_EVENT0("renderer", "EarlyOut_ZeroSwapbuffersPending"); 433 TRACE_EVENT0("renderer", "EarlyOut_ZeroSwapbuffersPending");
426 return; 434 return;
427 } 435 }
428 DCHECK(!updates_pending_swap_.empty()); 436 DCHECK(!updates_pending_swap_.empty());
429 ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front(); 437 ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front();
430 updates_pending_swap_.pop(); 438 updates_pending_swap_.pop();
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 991
984 void RenderWidget::didDeactivateCompositor() { 992 void RenderWidget::didDeactivateCompositor() {
985 TRACE_EVENT0("gpu", "RenderWidget::didDeactivateCompositor"); 993 TRACE_EVENT0("gpu", "RenderWidget::didDeactivateCompositor");
986 994
987 is_accelerated_compositing_active_ = false; 995 is_accelerated_compositing_active_ = false;
988 Send(new ViewHostMsg_DidActivateAcceleratedCompositing( 996 Send(new ViewHostMsg_DidActivateAcceleratedCompositing(
989 routing_id_, is_accelerated_compositing_active_)); 997 routing_id_, is_accelerated_compositing_active_));
990 998
991 if (using_asynchronous_swapbuffers_) 999 if (using_asynchronous_swapbuffers_)
992 using_asynchronous_swapbuffers_ = false; 1000 using_asynchronous_swapbuffers_ = false;
1001
1002 // Clear out pending updates.
1003 while (!updates_pending_swap_.empty()) {
1004 ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front();
1005 updates_pending_swap_.pop();
1006 if (msg)
1007 Send(msg);
1008 }
1009 }
1010
1011 void RenderWidget::didBeginFrame()
1012 {
1013 if (!WebWidgetHandlesCompositorScheduling())
1014 return;
1015
1016 ViewHostMsg_UpdateRect* msg = NULL;
1017 if (next_paint_flags_ || plugin_window_moves_.size()) {
1018 DCHECK(!pending_update_params_.get());
1019 pending_update_params_.reset(new ViewHostMsg_UpdateRect_Params);
1020 pending_update_params_->view_size = size_;
1021 pending_update_params_->resizer_rect = resizer_rect_;
1022 pending_update_params_->plugin_window_moves.swap(plugin_window_moves_);
1023 pending_update_params_->flags = next_paint_flags_;
1024 pending_update_params_->scroll_offset = GetScrollOffset();
1025 pending_update_params_->flags = next_paint_flags_;
1026 next_paint_flags_ = 0;
1027 }
1028
1029 if (pending_update_params_.get()) {
1030 msg = new ViewHostMsg_UpdateRect(routing_id_, *pending_update_params_);
1031 pending_update_params_.reset();
1032 }
1033 updates_pending_swap_.push(msg);
1034 }
1035
1036 void RenderWidget::didFinishFrame()
nduca 2011/11/11 06:01:08 One thing that nags me here is that Antoine's patc
1037 {
1038 if (!WebWidgetHandlesCompositorScheduling())
1039 return;
1040
1041 if (updates_pending_swap_.empty())
1042 return;
1043
1044 ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front();
1045 updates_pending_swap_.pop();
1046 if (msg) {
1047 Send(msg);
1048 }
993 } 1049 }
994 1050
995 void RenderWidget::scheduleComposite() { 1051 void RenderWidget::scheduleComposite() {
996 if (WebWidgetHandlesCompositorScheduling()) 1052 if (WebWidgetHandlesCompositorScheduling())
997 webwidget_->composite(false); 1053 webwidget_->composite(false);
998 else { 1054 else {
999 // TODO(nduca): replace with something a little less hacky. The reason this 1055 // TODO(nduca): replace with something a little less hacky. The reason this
1000 // hack is still used is because the Invalidate-DoDeferredUpdate loop 1056 // hack is still used is because the Invalidate-DoDeferredUpdate loop
1001 // contains a lot of host-renderer synchronization logic that is still 1057 // contains a lot of host-renderer synchronization logic that is still
1002 // important for the accelerated compositing case. The option of simply 1058 // important for the accelerated compositing case. The option of simply
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
1499 } 1555 }
1500 } 1556 }
1501 1557
1502 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { 1558 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) {
1503 return false; 1559 return false;
1504 } 1560 }
1505 1561
1506 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { 1562 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const {
1507 return false; 1563 return false;
1508 } 1564 }
OLDNEW
« no previous file with comments | « content/renderer/render_widget.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698