| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/renderer/render_widget.h" | 5 #include "chrome/renderer/render_widget.h" | 
| 6 | 6 | 
| 7 #include "app/surface/transport_dib.h" | 7 #include "app/surface/transport_dib.h" | 
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" | 
| 9 #include "base/logging.h" | 9 #include "base/logging.h" | 
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" | 
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 480 } | 480 } | 
| 481 | 481 | 
| 482 void RenderWidget::CallDoDeferredUpdate() { | 482 void RenderWidget::CallDoDeferredUpdate() { | 
| 483   DoDeferredUpdate(); | 483   DoDeferredUpdate(); | 
| 484 | 484 | 
| 485   if (pending_input_event_ack_.get()) | 485   if (pending_input_event_ack_.get()) | 
| 486     Send(pending_input_event_ack_.release()); | 486     Send(pending_input_event_ack_.release()); | 
| 487 } | 487 } | 
| 488 | 488 | 
| 489 void RenderWidget::DoDeferredUpdate() { | 489 void RenderWidget::DoDeferredUpdate() { | 
| 490   if (!webwidget_ || !paint_aggregator_.HasPendingUpdate() || | 490   if (!webwidget_ || update_reply_pending()) | 
| 491       update_reply_pending()) |  | 
| 492     return; | 491     return; | 
| 493 | 492 | 
| 494   // Suppress updating when we are hidden. | 493   // Suppress updating when we are hidden. | 
| 495   if (is_hidden_ || size_.IsEmpty()) { | 494   if (is_hidden_ || size_.IsEmpty()) { | 
| 496     paint_aggregator_.ClearPendingUpdate(); | 495     paint_aggregator_.ClearPendingUpdate(); | 
| 497     needs_repainting_on_restore_ = true; | 496     needs_repainting_on_restore_ = true; | 
| 498     return; | 497     return; | 
| 499   } | 498   } | 
| 500 | 499 | 
|  | 500   // Request animation updates. | 
|  | 501   // TODO(jamesr): Do we wanna throttle? | 
|  | 502   webwidget_->animate(); | 
|  | 503 | 
| 501   // Layout may generate more invalidation.  It may also enable the | 504   // Layout may generate more invalidation.  It may also enable the | 
| 502   // GPU acceleration, so make sure to run layout before we send the | 505   // GPU acceleration, so make sure to run layout before we send the | 
| 503   // GpuRenderingActivated message. | 506   // GpuRenderingActivated message. | 
| 504   webwidget_->layout(); | 507   webwidget_->layout(); | 
| 505 | 508 | 
|  | 509   // Suppress painting if nothing is dirty.  This has to be done after updating | 
|  | 510   // animations running layout as these may generate further invalidations. | 
|  | 511   if (!paint_aggregator_.HasPendingUpdate()) | 
|  | 512     return; | 
|  | 513 | 
| 506   // OK, save the pending update to a local since painting may cause more | 514   // OK, save the pending update to a local since painting may cause more | 
| 507   // invalidation.  Some WebCore rendering objects only layout when painted. | 515   // invalidation.  Some WebCore rendering objects only layout when painted. | 
| 508   PaintAggregator::PendingUpdate update; | 516   PaintAggregator::PendingUpdate update; | 
| 509   paint_aggregator_.PopPendingUpdate(&update); | 517   paint_aggregator_.PopPendingUpdate(&update); | 
| 510 | 518 | 
| 511   gfx::Rect scroll_damage = update.GetScrollDamage(); | 519   gfx::Rect scroll_damage = update.GetScrollDamage(); | 
| 512   gfx::Rect bounds = update.GetPaintBounds().Union(scroll_damage); | 520   gfx::Rect bounds = update.GetPaintBounds().Union(scroll_damage); | 
| 513 | 521 | 
| 514   // A plugin may be able to do an optimized paint. First check this, in which | 522   // A plugin may be able to do an optimized paint. First check this, in which | 
| 515   // case we can skip all of the bitmap generation and regular paint code. | 523   // case we can skip all of the bitmap generation and regular paint code. | 
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 674 void RenderWidget::scheduleComposite() { | 682 void RenderWidget::scheduleComposite() { | 
| 675   // TODO(nduca): replace with something a little less hacky.  The reason this | 683   // TODO(nduca): replace with something a little less hacky.  The reason this | 
| 676   // hack is still used is because the Invalidate-DoDeferredUpdate loop | 684   // hack is still used is because the Invalidate-DoDeferredUpdate loop | 
| 677   // contains a lot of host-renderer synchronization logic that is still | 685   // contains a lot of host-renderer synchronization logic that is still | 
| 678   // important for the accelerated compositing case. The option of simply | 686   // important for the accelerated compositing case. The option of simply | 
| 679   // duplicating all that code is less desirable than "faking out" the | 687   // duplicating all that code is less desirable than "faking out" the | 
| 680   // invalidation path using a magical damage rect. | 688   // invalidation path using a magical damage rect. | 
| 681   didInvalidateRect(WebRect(0, 0, 1, 1)); | 689   didInvalidateRect(WebRect(0, 0, 1, 1)); | 
| 682 } | 690 } | 
| 683 | 691 | 
|  | 692 void RenderWidget::scheduleAnimation() { | 
|  | 693     // TODO(jamesr): Come up with a more intelligent scheduling algorithm. | 
|  | 694     MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( | 
|  | 695         this, &RenderWidget::scheduleComposite)); | 
|  | 696 } | 
|  | 697 | 
| 684 void RenderWidget::didChangeCursor(const WebCursorInfo& cursor_info) { | 698 void RenderWidget::didChangeCursor(const WebCursorInfo& cursor_info) { | 
| 685   // TODO(darin): Eliminate this temporary. | 699   // TODO(darin): Eliminate this temporary. | 
| 686   WebCursor cursor(cursor_info); | 700   WebCursor cursor(cursor_info); | 
| 687 | 701 | 
| 688   // Only send a SetCursor message if we need to make a change. | 702   // Only send a SetCursor message if we need to make a change. | 
| 689   if (!current_cursor_.IsEqual(cursor)) { | 703   if (!current_cursor_.IsEqual(cursor)) { | 
| 690     current_cursor_ = cursor; | 704     current_cursor_ = cursor; | 
| 691     Send(new ViewHostMsg_SetCursor(routing_id_, cursor)); | 705     Send(new ViewHostMsg_SetCursor(routing_id_, cursor)); | 
| 692   } | 706   } | 
| 693 } | 707 } | 
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1021 | 1035 | 
| 1022 void RenderWidget::CleanupWindowInPluginMoves(gfx::PluginWindowHandle window) { | 1036 void RenderWidget::CleanupWindowInPluginMoves(gfx::PluginWindowHandle window) { | 
| 1023   for (WebPluginGeometryVector::iterator i = plugin_window_moves_.begin(); | 1037   for (WebPluginGeometryVector::iterator i = plugin_window_moves_.begin(); | 
| 1024        i != plugin_window_moves_.end(); ++i) { | 1038        i != plugin_window_moves_.end(); ++i) { | 
| 1025     if (i->window == window) { | 1039     if (i->window == window) { | 
| 1026       plugin_window_moves_.erase(i); | 1040       plugin_window_moves_.erase(i); | 
| 1027       break; | 1041       break; | 
| 1028     } | 1042     } | 
| 1029   } | 1043   } | 
| 1030 } | 1044 } | 
| OLD | NEW | 
|---|